Ver Mensaje Individual
  #4 (permalink)  
Antiguo 02/12/2008, 08:36
Avatar de nicolaspar
nicolaspar
 
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 20 años, 2 meses
Puntos: 34
Respuesta: Problema con números reales

Hola Basmang_15, el tema no es simple, pero por lo que estas haciendo seguramente lo comprendes y verás que es fácil. Hasta donde sabrás los números se guardan en formato binario. Y aquí está el problema.
El 1 se almacena exactamente como es, pero algunos otros números en clave decimal como 0.1 no se pueden grabar de manera exacta en binario.
Lo mismo te esta pasando con 1/3 que en decimal se convierte en 0.33333..., el número 1/10 (10 en notación decimal, no 10 binario) se convierte en periodico al ser expresado en binario: 0.1 (decimal) = .0001100011000111000111... (binario).
Y acá está el tema, éste número se redondea por 2.79E-17 (o algo así) porque la pc lo recortará al número de bits máximos que va a usar.
Así que la manera es reducir los periodicos, algo así:
Código:
uno =  numberFormat( (-10 / 3 ),4); 
dos =  numberFormat( 5 * ( 2 / 3 ),4) ;
Claro que esto puede romper el exacto (puedes usar DecimalFormat), pero para tu caso me parece que lo solucionará.

Saludos, y espero no haberte mareado.
__________________
Mi punto de partida es Que Bueno Lo Nuevo