Locale.getDefault()的数字格式未给出预期结果

时间:2012-09-10 11:28:31

标签: locale default number-formatting

我有这段代码:

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

有什么建议吗?提前谢谢

2 个答案:

答案 0 :(得分:0)

好的,答案是使用此代码:

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();

答案 1 :(得分:0)

这是因为您机器上的默认语言环境(JVM)将点解释为分组字符(3位分组,如1.000.000,00),并且最有可能的小数分隔符是逗号字符。

我使用默认的英国语言环境在我的机器上运行您的代码 和

System.out.println(stringToDouble("60.0")); System.out.println(stringToDouble("60")); System.out.println(stringToDouble("60,0"));

它打印: 60.060.0600.0

为了便于移植,请不要设置默认的特定区域设置。