Pregunta

Por qué cada vez que compilo y ejecuto el siguiente código en Visual Studio 2008:

double value1 = 10.5;
double value2 = 15.5;
int whole_number = value1 + value2;
Console::WriteLine(whole_number);

Obtengo un valor incorrecto de 26 mientras la respuesta es 25.

Sin embargo, cuando uso modelos estáticos en los dobles, obtengo la respuesta correcta que es 25.

¿Cómo se puede explicar la salida incorrecta?

¿Fue útil?

Solución

Tiene toda la razón.

double value1 = 10.5;
double value2 = 15.5;
int whole_number = value1 + value2; // int whole_number = 26.0;
Console::WriteLine(whole_number);

¿Qué esperarías en su lugar? El compilador primero evalúa el lado derecho y luego se convierte implícitamente al int. Por lo tanto, 26.0 se convierte en 26

Cuando lanza antes de agregar, entonces va a agregar 10 y 15 , lo que resulta en 25 :)

Otros consejos

En realidad, no puede confiar en números de coma flotante para redondear de cualquier manera cuando realiza una conversión automática. Si 26.0 está representado por 26.00005, se redondeará a 26, si está representado por 25.999995, se redondeará a 25. Si quiere estar seguro, use la función estándar C round , definida en math.h . Decir Así, 26.0 se convierte en 26 no es del todo correcto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top