0

Tengo un problema, estoy sumando varios números con comas, por ejemplo 2.3+0.1+0.3 eso me da como resultado 2.699999999999999999997 y no 2.7 como puedo lograr que me de 2.7 y no 2.6999999999999999.

  • Amigo tambien puedes usar math.round que lo hace es dar un numero mas cercano al argumento osea redondearlo – Jeysson Ureña Nov 16 '18 at 13:55
  • No hay razón para que 2.3+0.1+0.3 de 2.6999 a menos que alguno (o algunos) de los sumandos esté redondeado pero a nivel visual. Por ejemplo, que 0.1 se muestre en pantalla pero en realidad en la memoria sea 0.099999. En todo caso, habría que redondear los sumandos antes de la suma para obtener el valor que necesitas. ¿Podrías incluir el código donde realizas la suma y de donde obtienes el valor de los sumandos? – JYass Nov 16 '18 at 16:59

3 Answers3

3

Usa la clase propia de Java BigDecimal

Ejemplo

BigDecimal uno = new BigDecimal(2.3);
BigDecimal dos = new BigDecimal(0.3);

BigDecimal suma = uno.add(dos);

Ojo muy importante, en el ejemplo uno sigue valiendo 2.3 porque es inmutable.

API BigDecimal

JDev
  • 2,199
  • 7
  • 17
0

Muy buenas, según yo... sería así: Con la instrucción Math.ceil (Para el redondeo hacia arriba) La instrucción Math.floor (Para el redondeo hacia abajo) Y la instrucción Math.round (Para el redondeo más cercado)

Ej: System.out.Println(Math.ceil(2.3));
    System.out.Println(Math.floor(2.9));
    System.out.Println(Math.round(5.5));

//Salida:
//En su respectivo orden
3
2
6

Espero que te haya sido de ayuda. Un saludo.

  • y si hablamos de 30 decimales, sigue siento exacto? la pregunta no es como redondear, la pregunta es como hacer mas exacto la suma de numeros decimales – JackNavaRow Nov 16 '18 at 17:06
0

Vale, perdona por la confusión, entonces, yo creo que la forma mas sencilla sería con un:

system.out.printf("El número sería: %.2f", numero);

Donde número es el valor de la variable que le quieres dar. El ".2" es el numero de decimales que quieres que se imprima y la f después del .2 es la llamada a la variable, que en este caso es de tipo flontante "float". O sea que la f= float (Tipo de variable).