Double.valueOf上的​​NumberFormatException,带逗号小数分隔符

时间:2015-02-13 06:09:21

标签: java numberformatexception

带逗号小数分隔符的Double.valueOf抛出NumberFormatException。 Java 1.7.0_67和1.8.0_25。

我也尝试用","设置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");

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

Double.valueOf(String)未考虑默认语言环境。请注意,该方法的API文档准确说明了它所期望的格式。它还告诉你:

  

要解释浮点值的本地化字符串表示形式,请使用NumberFormat的子类。

例如,使用DecimalFormat来解析字符串。

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

答案 2 :(得分:0)

Double.valueOf()不支持Locale。它只能将带点的数字理解为小数位。

幸运的是,您可以使用相同的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