德国的Java-Scanner区域设置返回0,同时总结双精度值

问题描述:

这是一个使用Java扫描程序的小程序,它读取double值的文件并对其进行总结。德国的Java-Scanner区域设置返回0,同时总结双精度值

我正在使用某些语言环境进行验证,德国\德国的值为零。

这里是代码片段,

s= new Scanner((Readable) new BufferedReader(new FileReader("ScanNum"))); 
s.useLocale(Locale.GERMAN); 
System.out.println(s.locale()); 
while(s.hasNextDouble()) 
{ 
sum+=s.nextDouble(); 
} 

和保持双值的文件, 8.5 3.14159 1,000,000.1

其他区域设置值返回is1032778.74159。

请注意, 谢谢!

+3

在德国'.'是千位分隔符 – 2012-04-02 12:01:52

8.5在德语语言环境中基本上不是有效的double值。德语(和许多其他欧洲语言环境)使用,作为小数点分隔符,而.作为千位分隔符。因此在德语中,您的文本文件必须如下所示:

8,5 
32.767 
3,14159 
1.000.000,1 
+0

非常感谢! – mee 2012-04-03 08:32:44

您的问题是由德国的不同数字格式引起的。在标准的德语区域设置中,千位分隔符是点号,小数点分隔符是逗号 - 与文件格式相反。因此,在循环的第一次迭代中,hasNextDouble返回false,因为8.5在德语区域设置中不是格式正确的小数 - 它应该是8,5