2015-02-13 1 views
2

Double.valueOf с запятой decimal throwers NumberFormatException. Java 1.7.0_67 и 1.8.0_25.NumberFormatException on Double.valueOf с разделителем запятой десятичный

Я также пытаюсь установить DecimalFormatSymbols с «,» как decimalSeparator.

Locale.setDefault(Locale.FRANCE); 
assert "12,3".equals(NumberFormat.getInstance().format(12.3)); 
if (((DecimalFormat) NumberFormat.getInstance()).getDecimalFormatSymbols().getDecimalSeparator() == ',') 
    Double.valueOf("12,3"); 

ответ

0

Double.valueOf(String) не учитывает учетную запись по умолчанию. Обратите внимание, что документация по API в этом методе точно определяет, какой формат он ожидает. Он также сообщает вам следующее:

Для интерпретации локализованных строковых представлений значения с плавающей запятой используйте подклассы NumberFormat.

Используйте, например, DecimalFormat вместо этого, чтобы разобрать строку.

DecimalFormat format = new DecimalFormat("##.#"); 
Double value = (Double) format.parse("12,3"); 
0

Double.valueOf() не знает местонахождение. Он только понимает числа с точками в виде десятичных знаков.

К счастью, вы можете использовать один и тот же экземпляр NumberFormat для форматирования и синтаксических, который Locale известен ....

NumberFormat format = NumberFormat.getInstance(Locale.FRANCE); 

System.out.println(format.format(12.3)); // ==> "12,3" 
System.out.println(format.parse("12,3")); // ==> 12.3 
2
NumberFormat format = NumberFormat.getInstance(Locale.FRANCE); 
Number number = format.parse("12,3"); 
Double d = number.doubleValue(); 
System.out.println(d);