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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top