Почему DecimalFormat игнорирует группировку символов? - PullRequest
1 голос
/ 29 июня 2011

Мне не нравится поведение Java-класса DecimalFormat.

Я пытаюсь ввести значение «0,23» в текстовое поле с использованием немецкого языка (где «.» - символ группировки, а не десятичное число!).

Ожидаемый результат будет:

  • с включенной группировкой: ParseException, потому что символ группировки находится не в том месте

  • с отключенной группировкой: ParseException, потому что '.' символ не допускается.

Фактический результат:

  • с включенной группировкой: 23,0

  • с отключенной группировкой: 0,0

Кто-нибудь знает о лучшей реализации, или я должен подать это как ошибку Java?

Ответы [ 2 ]

1 голос
/ 29 июня 2011

Когда группировка отключена, символ '.'не может быть частью числа.

Из API синтаксического анализа (источник строки) NumerFormat:

"Метод не может использовать весь текст данной строки."

Таким образом, метод прекратит синтаксический анализ после прочтения первого символа, который не может быть частью числа.Таким образом, «0,23» всегда равно 0. и «0,1.2.3» это 0,1

0 голосов
/ 29 июня 2011
    Locale.setDefault(Locale.GERMAN);
    DecimalFormat format = new DecimalFormat();
    Number d = format.parse("0.23");
    System.out.println(d);
    d = format.parse("1.000,23");
    System.out.println(d);

Это работает для меня, вывод 23 и 1000.23.

...