¿Por qué las operaciones matemáticas en ColdFusion no parecen verse afectadas por problemas matemáticos de coma flotante? Tome el código:¿Por qué 0.06 + 0.01 = 0.07 en ColdFusion?
result = 0.06 + 0.01;
writedump(result);
writedump(result.getClass().getName());
que da salida a
0,07
java.lang.Double
Sin embargo, el código Java equivlant lo que produce "d espera al añadir dos dobles :
public static void main(String[] args) {
double a = 0.01d;
double b = 0.06d;
System.out.println(a + b); //0.06999999999999999
}
Esto es lo que esperaría ver de ColdFusion debido a las realidades de las matemáticas flotantes (http://download.oracle.com/docs/cd/E19957-01/806-3568/ncg_goldberg.html).
¿ColdFusion hace algo de "magia" detrás de escena o estoy viendo una anomalía aislada aquí?
Todo lo que google dice no tiene nada de especial y produce los resultados que espera (y la gente pregunta por qué, porque no entienden la precisión del punto flotante). ¿Estás seguro de que no ocurre nada más en tu código CF? –
Sí, ese fragmento es eso. Acabo de crear los escenarios más simples para ver qué pasaría. Lo que es extraño es si tomo ese código un paso más allá y hago 'a = 0.01; b = 0.06; writedump (a.getClass(). getName(); 'Obtengo un String. Definitivamente hay alguna conversión implícita ocurriendo detrás de escena. – bittersweetryan
CF almacena la mayoría de los valores como cadenas inicialmente. Solo los convierte a otros tipos (número, fecha, etcétera) según sea necesario. Por ejemplo, cuando se aplica un operador matemático como '+'. http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSc3ff6d0ea77859461172e0811cbec09af4-7fc3.html – Leigh