Páginas

12/2/15

java.lang.numberformatexception: For input string:

java.lang.NumberFormatException: For input string: "0,0".

java.lang.NumberFormatException



java.lang.NumberFormatException es una excepción en Java que a veces nos hace perder mucho tiempo cuando en realidad es una tontería, en este dato java te digo como solucionarlo.

Pongo de ejemplo este caso, estamos en un proyecto y resulta que todo funciona bien pero al tiempo cuando le haces una prueba comienza a fallar lanzando esta excepción en particular "java.lang.NumberFormatException: For input string: '0,0'", ahí es cuando te preguntas si es algún tipo de brujería o que es lo que está pasando, ya que ese código paso todas las etapas de prueba y en producción funciona de maravilla pero en tu maquina localhost no funciona... Que caga... Bueno te cuento que ahí interviene la configuración regional de tu equipo, en mi caso lo que paso fue eso, parece que en algún momento de mi vida cambie la configuración regional de mi equipo y Java a la hora de compilar esta tomando tu configuración regional y puede que algunas cosas no funcionen como deberían, para solucionarlo no cambie la configuración regional de mi equipo sino que utilice otro método el cual me asegura que funcionara con cualquier configuración regional.

En el código hacía unas operaciones con tipos de datos Double, por lo tanto para formatear el valor utilizo un DecimalFormat y ahí lanzaba la excepción, el código es así:
   Double valor = 0.0;
   DecimalFormat decimalFormat = new DecimalFormat("0.0");

   valor = Double.valueOf(decimalFormat.format((88778.65 / 13456.0)));
  
Justamente en la línea 4 se produce el error, para solucionar ese problemita independientemente de tu configuración regional, utilice la clase java.text.DecimalFormatSymbols de esta manera.
   DecimalFormatSymbols decimalFormatSymbols = DecimalFormatSymbols.getInstance();
   decimalFormatSymbols.setDecimalSeparator('.');
   
   Double valor = 0.0;
   DecimalFormat decimalFormat = new DecimalFormat("0.0", decimalFormatSymbols);

   valor = Double.valueOf(decimalFormat.format((88778.65 / 13456.0)));
  
Lo que hago es cambiarle el separador decimal que utiliza DecimalFormat basado en mi configuración regional. Depurando el ejemplo te muestro una lista de las propiedades de la clase DecimalFormatSymbols. Está utilizando la configuración regional de Perú.
DecimalFormatSymbols
DecimalFormatSymbols
Como vemos el separador de decimales en este caso es una "," y por eso lanza la excepción, espero hallas encontrado esta solución rápidamente y sigas programando tu aplicación relajado :)...



No hay comentarios :

Publicar un comentario