【问题标题】:Number format with Locale.getDefault() not giving expected result带有 Locale.getDefault() 的数字格式没有给出预期的结果
【发布时间】:2012-09-10 11:28:31
【问题描述】:
我有这个代码:
public double stringToDouble(String s) {
NumberFormat nf = NumberFormat.getInstance(Locale.getDefault());
try {
return nf.parse(s).doubleValue();
} catch (java.text.ParseException e) {
return 0.0;
}
}
它工作正常,但对于某些值,例如 60.0,它给出 600.0,我不知道为什么,对于 60,它给出 60.0
有什么建议吗?提前致谢
【问题讨论】:
标签:
locale
default
number-formatting
【解决方案1】:
好的,答案就是使用这个代码:
public double stringToDouble(String s) {
NumberFormat nf = NumberFormat.getInstance(Locale.getDefault());
nf.setGroupingUsed(false);
ParsePosition parsePosition = new ParsePosition(0);
Number n = nf.parse(s, parsePosition);
if (n == null || parsePosition.getErrorIndex() >= 0 || parsePosition.getIndex() < s.length())
{
/* not a valid number */
}
return n.doubleValue();
}
用这个代替 Double.parseDouble();
【解决方案2】:
发生这种情况是因为您的机器 (JVM) 上的默认语言环境将点解释为分组字符(3 位数分组,如 1.000.000,00),并且小数分隔符很可能是逗号字符。
我在我的机器上使用默认的英国语言环境运行您的代码
对于
System.out.println(stringToDouble("60.0"));
System.out.println(stringToDouble("60"));
System.out.println(stringToDouble("60,0"));
它打印:
60.0 和
60.0 和
600.0
为了可移植性,不要设置默认而是特定的语言环境。