Parece que hay algún tipo de error de redondeo oscura cuando corro el siguiente código:Resultado de fundición doble a int está mal
int roundedTotal = (int)(PriorityJob * 100.0);
Inicialmente PriorityJob = 1.4
roundedTotal
y no está definido. La evaluación de PriorityJob * 100.0
en ese punto da 140
. Luego roundedTotal = 139
.
Aparentemente, 140.0 se interpreta como 139.99999. ¿Es esto una deficiencia en el motor de coma flotante? Nunca he visto algo así.
usted nunca ha visto aproximan? –
1.4 no existe como un flotador. De hecho, hay una cantidad infinita de números, incluso entre 1.0 y 2.0, que no pueden representarse como float, 1.4 es uno de ellos. Así que se almacena como una aproximación de 1.4, como 1.3999999999999999 – nos
@LuchianGrigore Parece una operación tan simple. ¿Por qué debería fallar así? –