我有这段代码:
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
有什么建议吗?提前谢谢
答案 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.0
和
60.0
和
600.0
为了便于移植,请不要设置默认的特定区域设置。