Java - Suma incorrecta

 
Vista:

Suma incorrecta

Publicado por Dani (1 intervención) el 12/03/2003 17:20:42
Tengo el siguiente problema:

double a1 = 5.59;
double b1 = -5.54;
System.out.println(a1+"+"+b1+"="+(a1+b1));

Me sale que la suma es: 0.04999999999999982 y todos sabemos que es 0.05

¿Cómo lo hago?
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

RE:Suma incorrecta

Publicado por Yeagob (15 intervenciones) el 13/03/2003 13:45:53
Prueba con la instrucción Round, de la clase Math...

System.out.println(a1+"+"+b1+"="+Math.round((a1+b1)));

A lo mejor con el double no te va, porque round recibe un float, si no te va prueba asín:
System.out.println(a1+"+"+b1+"="+Math.round((float)(a1+b1)));

Suerteeeee.
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

RE:Suma incorrecta

Publicado por chuidiang (533 intervenciones) el 13/03/2003 15:09:12

El problema que tienes es que en un double (o float) no son posibles todos los números decimales. Esto pasa con cualquier lenguaje y es relativamente normal al hacer cuentas con flotantes o doubles obtener 0.99999... en vez de 1 o como en tu caso 0.0499999... en vez de 0.05

No hay una solución fácil que yo sepa, salvo hacer algo en el momento de imprimir el numero.

En java tienes la clase java.text.DecimalFormat, que escribe doubles y floats indicando cuantos decimales quieres y hace bien los redondeos.

Por ejemplo

DecimalFormat numero = new DecimalFormat ("#.####");
System.out.println (numero.format(0.04999999));

escribe 0.05 en pantalla.

La pega es que tienes que "limitar" el número máximo de decimales. Este error de flotanes suele aparecer en un decimal muy alejado del punto decimal (en tu caso, en el decimal 15). Deberías poner, por ejemplo y para asegurar, que se escriban un máximo de 10 decimales.

Se bueno.
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

Respuesta, por extraño que paresca

Publicado por Oscar (661 intervenciones) el 14/03/2003 00:34:07
double a1 = 5.59d;
double b1 = -5.54d;
System.out.println(a1 + "+" + b1 + "=" + (float)(a1+b1));

Solo has el casting a float.

Se que la respuesta debe estar por ahi:
http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html#9249
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