0

Tengo el siguiente problema, obtengo el importe como un String, necesito pasarlo a céntimos y al multiplicar por 100 obtengo un valor incorrecto al inicial, lo redondea. ¿Por qué ocurre esto y cuál sería la forma más elegante de evitarlo?

Ejemplo:

String importe = "315.84";

Double importeVal = Double.valueOf(importe); <-- Aquí se obtiene bien el valor 315.84

importeVal = importeVal * 100; <-- Aquí obtenemos el valor 31583.999999999996

importe = String.valueOf(importeVal); <- Se convierte a string el valor 31583.999999999996

System.out.println(importe); <-- Se pinta 31583.999999999996

1 Answers1

1

El problema que surge es que al realizar el cambio de un tipo a otro, parece que Java redondea. Para solucionarlo, podemos aplicar un Math.round() y así logramos guardar en un long el valor que realmente se ajusta a lo que buscas:

    String importe = "315.84";

    Double importeVal = Double.valueOf( importe ).doubleValue();

    long importeValRounded = Math.round( importeVal * 100 );

    importe = String.valueOf( importeValRounded );

    System.out.println( importe );

En este post de SO explican el problema que te ha surgido a nivel más técnico: Double multiplied by 100 and then cast to long is giving wrong value

F. López
  • 141
  • 5