带逗号小数分隔符的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");
答案 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