Вы пытаетесь выполнить синтаксический анализ с использованием шаблона, который ожидает запятую (как на немецком языке), но вы дали ей точку ("0,459"). Похоже, DecimalFormat
прекращает синтаксический анализ, когда видит символ, которого не понимает. Если вы измените его на «0,459», вы увидите, что он правильно проанализирован, а затем выведите «0,459». (Я не уверен, что System.out.println
использует системный языковой стандарт по умолчанию, в этом случае может напечатать «0,459» в зависимости от вашего языкового стандарта.)
Обратите внимание, что вы даже не пытались отформатировать число в этом коде - только анализ число. Если вы хотите отформатировать его, позвоните в формате. Сам double
не имеет ассоциированного формата - это просто число. Это не похоже на синтаксический анализ с использованием определенного средства форматирования, который возвращает значение, которое сохраняет этот формат.
Вот код, который будет выполнять фактическое форматирование двойного значения:
DecimalFormat format = (DecimalFormat)NumberFormat.getInstance(new Locale("de"));
double value = 0.459;
String formatted = format.format(value);
System.out.println(formatted); // Prints "0,459"
РЕДАКТИРОВАТЬ: Хорошо, похоже, вы конвертируете его из одного формата в другой (например, из США в европейский). Это означает, что вам, вероятно, следует использовать два разных объекта DecimalFormat
- вы могли бы переключать язык между вызовами, но это звучит немного мрачно для меня.
Я считаю, что одним из способов анализа и обнаружения ошибок является использование перегрузки parse
, которая также принимает ParsePosition
. Для начала установите значение 0, а затем проверьте, что оно находится в конце строки - если это не так, это означает, что синтаксический анализ фактически не удался. Мне кажется странным, что не существует метода, который делает это автоматически и выдает исключение, но я не вижу его ...
Вы также можете настроить синтаксический анализатор на выдачу BigDecimal
вместо double
, если вы имеете дело со значениями, которые являются более логически десятичными по природе. Вы можете сделать это с помощью метода setParseBigDecimal
.