puedo tener algunos problemas con la precisión float de JavaCuál es la manera correcta de parseFloat en Java
Float.parseFloat("0.0065") - 0.001 // 0.0055000000134110451
new Float("0.027") - 0.001 // 0.02600000000700354575
Float.valueOf("0.074") - 0.001 // 0.07399999999999999999
no sólo tengo un problema con Float
sino también con Double
.
Puede alguien explicar lo que está sucediendo detrás de las escenas, y cómo podemos obtener un número exacto? ¿Cuál sería la forma correcta de manejar esto cuando se trata de estos problemas?
+1 por mencionar que '0.001' es un' doble'. –
diciendo que "float se está promocionando a un doble" ¿significa que el compilador lo ha duplicado internamente? ¿Promueve que float se duplique incondicionalmente cada vez que lo usemos con el doble para el cálculo? – peter
@ user1389813: Sí. De acuerdo con [§5.6.2 "Promoción binaria numérica" de * La especificación del lenguaje Java * (Java SE 7 Edition)] (http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.6 .2), hay varios operadores numéricos, incluido '-', con la propiedad de que ambos operandos se convertirán al mismo tipo para realizar el cálculo. Una de las reglas de conversión es: "Si cualquier operando es del tipo' double', el otro se convierte en 'double'." – ruakh