0

我有这个代码:

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

有什么建议么?提前致谢

4

2 回答 2

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

为了可移植性,不要设置默认值,而是设置特定的语言环境。

于 2014-01-21T14:43:36.127 回答
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();

于 2012-09-10T13:30:22.763 回答