Foros del Web » Programación para mayores de 30 ;) » Java »

rarezas del parseFloat y parseDouble

Estas en el tema de rarezas del parseFloat y parseDouble en el foro de Java en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 17/07/2018, 09:27
 
Fecha de Ingreso: diciembre-2005
Mensajes: 24
Antigüedad: 18 años, 11 meses
Puntos: 2
rarezas del parseFloat y parseDouble

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!
  #2 (permalink)  
Antiguo 17/07/2018, 12:29
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 16 años, 5 meses
Puntos: 61
Respuesta: rarezas del parseFloat y parseDouble

Los floats usan 23 bits para la mantisa, eso corresponde a numeros con 7 digitos
log10(2^23) = 2*log10(2) ~ 6.9

al intentar poner 8 digitos, seguro que el octavo digito se pierde / se inventa, o al menos tu al usarlo asi, te la juegas con lo que alli se guarda.

Los doubles pueden almacenar hasta 16 digitos.
__________________
Visita mi perfil en LinkedIn

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:38.