Saltar al contenido

Problema de análisis del formato decimal de Java

Esta inquietud se puede solucionar de diferentes maneras, pero te damos la respuesta más completa para nosotros.

Solución:

Hay dos tipos de espacios. El carácter de espacio “normal” (No. 32 – HEX 0x20) y el espacio de no separación (NBSP) (No. 160 – HEX 0xA0).

¡La configuración regional francesa espera que el carácter de espacio en blanco entre los dígitos sea el espacio que no se rompe! Puedes ayudarte con esta línea de código:

String num = "1 201";
num = num.replaceAll(" ", "u00A0");    // 'u00A0' is the non breaking whitespace character!

De esta manera, su código funcionará como se esperaba. Tenga en cuenta que si formatea un double en un String con la configuración regional francesa, el carácter de espacio en blanco resultante también será el NBSP.

DecimalFormat df = (DecimalFormat) NumberFormat.getNumberInstance(Locale.FRENCH);
System.out.println(df.format(1201.1));
// This will print "1 202,1" But the space character will be 'u00A0'!

Puedes usar

 String num = "1 201";
 DecimalFormat df = (DecimalFormat) NumberFormat.getNumberInstance(Locale.FRANCE);
 System.out.println("Number Before parse: "+num);   

 DecimalFormatSymbols symbols = df.getDecimalFormatSymbols();
 symbols.setGroupingSeparator(' ');
 df.setDecimalFormatSymbols(symbols);

 double  dm = df.parse(num).doubleValue();
 System.out.println("Number After parse: "+dm);  

Rendimiento esperado:

Number Before parse: 1 201
Number After parse:  1201.0

En realidad, Java está usando el carácter de espacio irrompible (u00a0) para analizar números franceses.

Por lo tanto, el siguiente código realmente funciona:

String num = "1u00a0201";
double dm = df.parse(num).doubleValue();
System.out.println("Number After parse: " + dm);

Consulte la respuesta de @ParkerHalo que proporciona más detalles.

valoraciones y comentarios

Si conservas alguna indecisión y disposición de arreglar nuestro reseña te inspiramos dejar un exégesis y con mucho placer lo ojearemos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *