Java DecimalFormat: cómo rechazar de entrada “no válido” con decimales agrupados?
-
16-09-2019 - |
Pregunta
Cuando se utiliza el siguiente NumberFormat:
NumberFormat amountFormat = NumberFormat
.getNumberInstance(I18N.getThreadLocale());
amountFormat.setMaximumFractionDigits(2);
amountFormat.setMinimumFractionDigits(2);
consigo los siguientes resultados cuando se analizan a través de
System.out.println(amountFormat.parse(value));
- 10,50 => 1050
- 10,5 => 105
- 0,25 => 25
Yo sé que en el Locale.ENGLISH "" es el separador de grupo. Pero no creo que los resultados anteriores tienen sentido. Y nuestros clientes se ponen extrañas acerca de este formato.
¿Cómo puedo desactivar esta agrupación?
Me gustaría tener los siguientes resultados:
- 10,50 => ParseException
- 10,5 => ParseException
- 0,25 => ParseException
¿Hay una manera estándar de hacer esto? O tengo que programar mi propio NumberFormat?
Solución
Uno de los problemas es el carácter de agrupamiento ( '' en un local Inglés). Para desactivar la agrupación de apoyo a la instancia NumberFormat, puede simplemente invocar setGroupingUsed (falso).
Sin embargo, esto conduce a un problema diferente, a saber, que NumberFormat analiza desde el principio de la cadena, hasta que llega un carácter desconocido. analizar ( "12foo") devolverá 12, así como de análisis ( "10,50") devolverá 10 si agrupación está desactivado. Para comprobar si la cadena de entrada se analiza sintácticamente, usted tiene que utilizar los métodos de análisis sintáctico con un argumento ParsePosition y comprobar su índice y si la cadena de entrada se ha analizado al final o si el analizador parado en una posición anterior en la cadena.