Pergunta

Ao usar o seguinte NumberFormat:

    NumberFormat amountFormat = NumberFormat
        .getNumberInstance(I18N.getThreadLocale());
    amountFormat.setMaximumFractionDigits(2);
    amountFormat.setMinimumFractionDigits(2);

Eu recebo os seguintes resultados ao analisar via

    System.out.println(amountFormat.parse(value));
  • 10,50 => 1050
  • 10,5 => 105
  • 0,25 => 25

Eu sei que em Locale.ENGLISH a "" é o separador de grupo. Mas eu não acho que os resultados acima faz sentido. E nossos clientes a obter estranho sobre esta formatação.

Como posso desativar este agrupamento?

Eu gostaria de ter os seguintes resultados:

  • 10,50 => ParseException
  • 10,5 => ParseException
  • 0,25 => ParseException

Existe uma maneira padrão para fazer isso? Ou eu tenho para programar minha própria NumberFormat?

Foi útil?

Solução

Um dos problemas é o caráter agrupamento ( '' em um local Inglês). Para desativar o suporte de agrupamento para a instância NumberFormat, você pode simplesmente invocar setGroupingUsed (false).

Este, porém, leva a um problema diferente, ou seja, que analisa NumberFormat do início da cadeia, até que ele atinja um caráter desconhecido. analisar ( "12foo") irá retornar 12, assim como parse ( "10,50") retornará 10 se agrupar está desativado. Para verificar se toda a cadeia de entrada realmente foi analisado, você tem que usar os métodos de análise com um argumento ParsePosition e verificar o seu índice e se a cadeia de entrada foi analisado para o fim ou se o analisador parou em uma posição anterior na cadeia.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top