miércoles, 5 de noviembre de 2008

problemas de precision de float y double

veamos los siguientes ejemplos :

1) para un float

for(float i = 0f; i<1; i += 0.1f){
System.out.println(""+ i );
}
salida :
0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.70000005
0.8000001
0.9000001

2) para double

double dividendo = 1812.6;

double resultado = 0;

resultado = dividendo / 100;

System.out.println("resulatado :"+resultado);

salida: 18.125999999999998


para solucionar esta imprecision de la variables primitivas de coma
flotante tenemos que implementar la clase BigDecimal.

http://java.sun.com/j2se/1.4.2/docs/api/java/math/BigDecimal.html

otra forma menos formal es redondiar el valor decimal con
el metodo math.round()

este error no es propio de java , sino de la mayoria de los lenguajes
de programacion .

en este link explica porque sucede esto

http://developers.sun.com/solaris/articles/fp_errors.html

y como estamos hablando de decimales seria bueno mencionar
mencionar la forma de dar formato a una decimal.

import java.text.DecimalFormat;

DecimalFormat formateador = new DecimalFormat("####.####");

// Esto sale en pantalla con cuatro decimales, es decir, 3,4324
System.out.println (formateador.format (3.43242383));

No hay comentarios: