Десятичный формат Java:как отклонить «неверный» ввод с сгруппированными десятичными знаками?

StackOverflow https://stackoverflow.com/questions/1680120

Вопрос

При использовании следующего NumberFormat:

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

Я получаю следующие результаты при анализе через

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

Я знаю, что в Locale.ENGLISH "," является разделителем групп.Но я не думаю, что приведенные выше результаты имеют смысл.И наши клиенты странно относятся к такому форматированию.

Как отключить эту группировку?

Я хотел бы получить следующие результаты:

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

Есть ли стандартный способ сделать это?Или мне нужно запрограммировать свой собственный NumberFormat?

Это было полезно?

Решение

Одной из проблем является символ группировки («,» в английской локали).Чтобы отключить поддержку группировки для экземпляра NumberFormat, вы можете просто вызвать setGroupingUsed(false).

Однако это приводит к другой проблеме, а именно к тому, что NumberFormat анализирует строку с начала, пока не достигнет неизвестного символа.parse("12foo") вернет 12, так же как parse("10,50") вернет 10, если группировка отключена.Чтобы проверить, была ли действительно проанализирована вся входная строка, вам необходимо использовать методы синтаксического анализа с аргументом ParsePosition и проверить его индекс, а также проверить, была ли входная строка проанализирована до конца или анализатор остановился на более ранней позиции в строке.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top