Java 将带逗号的字符串值转换为带正确区域设置的十进制值

Java 将带逗号的字符串值转换为带正确区域设置的十进制值,java,Java,我试图从十进制字符串值创建双对象,其中逗号是浮动分隔符 向vm传递区域设置参数: -Duser.country=BR -Duser.language=PT String value = "500,21"; Double dob = new Double(value); 获取异常: java.lang.NumberFormatException:对于输入字符串:“500,21” sun.misc.FloatingDecimal.readJavaFormatString(Flo

我试图从十进制字符串值创建双对象,其中逗号是浮动分隔符

向vm传递区域设置参数:

-Duser.country=BR
-Duser.language=PT


String value = "500,21";        
Double dob = new Double(value);
获取异常:

java.lang.NumberFormatException:对于输入字符串:“500,21” sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1224) 在java.lang.Double.valueOf(Double.java:475)处 java.lang.Double.(Double.java:567)


您可以尝试使用本地化的
NumberFormat

String value = "500,21";
// replace the hard-coded Locale definition with your arguments, or
// Locale.getDefault(), etc.
NumberFormat nf = NumberFormat.getInstance(new Locale("pt", "BR"));
try {
    Double d = nf.parse(value).doubleValue();
    System.out.println(d);
}
catch (ParseException pe) {
    // TODO
}
输出

500.21

看起来,
newdouble(value)
没有考虑区域设置

实现最终调用此方法,并且只查找“.”

通过设置与您相同的区域设置,您可以使用以下内容:

NumberFormat.getInstance().parse(value).doubleValue()

这是一个类似的讨论。

只需将逗号替换为点,它将始终有效;)我知道,但是我问的是关于语言环境的变化,比如Double、Integer、Float等的解析和格式。对象非常糟糕(而且很旧)。它们不支持区域设置:请参阅Javadoc了解Double.valueOf(我认为构造函数最终会调用它)。所以,正如Mena所说,您必须使用NumberFormat.Thigh可能有效,但Double(string)不能使用提供的区域设置的原因是什么?