es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La mejor manera de manejar la entrada de dinero.

Estoy haciendo un programa bancario básico en c++ y tengo una función de depósito que acepta un double, por lo que quiero manejar la entrada del usuario para un double que sea válido como dinero, a 2 decimales y no menos de 0.

¿Cuál es la mejor manera de hacer esto?
Tengo esto hasta ahora, ¿hay algo más que necesite verificar para la validación del dinero o algo que se pueda hacer en menos líneas de código? Gracias.

// permitir al usuario depositar fondos en una cuenta
try{
double amount = std::stoi(userInput); // userInput es un string
if (amount < 0)
{
throw std::invalid_argument("El monto no puede ser negativo");
}
// llame a la función para depositar
std::cout << "Ha depositado " << amount << " en su cuenta." << std::endl;
}
catch(std::invalid_argument){
std::cout << "Entrada no válida." << std::endl;
}

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para manejar la entrada del usuario para un valor monetario válido a dos decimales y no menor que 0, es mejor utilizar el siguiente enfoque:

    1. Convertir la cadena ‘userInput’ en un double utilizando std :: stod.
    2. Comprobar si el monto es menor que 0, lanzar una excepción std :: invalid_argument con el mensaje “El monto no puede ser negativo”.
    3. Usar std :: round y setprecision (2) para redondear el monto a 2 decimales.
    4. Compruebe si el monto redondeado es igual al monto original, de lo contrario, lance una excepción std :: invalid_argument con el mensaje “Entrada no válida”.
    5. La función de depósito se puede llamar con el monto válido.

    Aquí está el código modificado:

    try {
        double amount = std::stod(userInput);
        if (amount < 0) {
            throw std::invalid_argument("El monto no puede ser negativo");
        }
        double rounded_amount = std::round(amount * 100) / 100.0;
        if (rounded_amount != amount) {
            throw std::invalid_argument("Entrada no válida");
        }
        // llamar a la función de depósito
        std::cout << "Has depositado " << std::fixed << std::setprecision(2) << rounded_amount << " en tu cuenta." << std::endl;
    }
    catch (std::invalid_argument& e) {
        std::cout << "Error: " << e.what () << std::endl;
    }
    

    Este código verifica la entrada negativa y las posiciones decimales inválidas e imprime el monto redondeado a 2 decimales. También puede agregar verificaciones adicionales, como verificar la entrada no numérica, pero esto debería cubrir los requisitos básicos de validación de dinero.

Comments are closed.