Java - Rarezas del parseFloat y parseDouble

 
Vista:

Rarezas del parseFloat y parseDouble

Publicado por sebotta (18 intervenciones) el 17/07/2018 17:25:49
Hola a todos, Estoy teniendo el siguiente problema, que no es menor, estoy teniendo diferencias de centavos en un sistema, cuando analizo el problema me encuentro que es debido a la conversión a Float hice la siguiente prueba que me dejo muy preocupado:

float a = Float.parseFloat("154721.49");
double b = Double.parseDouble("154721.49");

System.out.println(a);
System.out.println(b);

el resultado fue:

154721.48
154721.49

Aparentemente es un error aleatorio (antes no me había sucedido....creo!?)

Estas pruebas fueron realizadas en dos maquinas con SO Linux.

A alguien le había sucedido esto? Esto sucede solo en Float o tambien sucede en Double? Hay notas al respecto?

Desde ya muchas gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Rarezas del parseFloat y parseDouble

Publicado por Tom (1606 intervenciones) el 17/07/2018 17:43:42
Supongo que sabes que la representación de los números "en coma flotante" no es más que una aproximación.
Con el tipo Double tienes bastante más precisión que con el float, por lo tanto tendrás menos problemas de este tipo.

https://en.wikipedia.org/wiki/Single-precision_floating-point_format
https://docs.oracle.com/cd/E19957-01/806-3568/ncg_math.html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Rarezas del parseFloat y parseDouble

Publicado por sebotta (18 intervenciones) el 17/07/2018 18:44:42
Te agradezco Tom por tu rápida contestación, si entiendo el tema de la precisión, pero no sabia que la precisión era 7 dígitos y el 8 ya lo aproximaba, aun en un pasaje de texto a float (tiene menos precisión que la calculadora que usaba en los años 80, jaja)
Si eso lo hubiese hecho después de una operación cualquiera... es entendible.
Nuevamente muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Rarezas del parseFloat y parseDouble

Publicado por Tom (1606 intervenciones) el 17/07/2018 20:34:20
No has echado un ojo a los enlaces, supongo.
Para quien le interese el tema:
https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html

Y para los que, además, les preocupe:

https://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar