当我使用Java的DecimalFormatter和不同的Locales时,我看到了奇怪的行为。如果数字是一个双重值1,255,000,000(在调试器中,它显示为1.255E9),我将它传递给带有Locale的DecimalFormatter。
如果Locale设置为de | DE,则将数字转换为1.255E13。
如果Locale设置为en | US,它会将数字(正确)转换为1.255E9。
为什么德语区域设置做错了?
这是我的代码......
// number comes from JSP
// usually in form of "1.255E9"
String text = request.parameter("number");
NumberFormat numFormatter = NumberFormat.getInstance(formatLocale);
DecimalFormat formatter = (DecimalFormatter)numFormatter;
formatter.applyPattern("#,###");
return formatter.parse(text.trim()).doubleValue();
**编辑更加清晰**
传递给服务器端代码的字符串与上面概述的“1.255E9”完全相同。在JSP页面上,我只是在做像
这样的HTML<input type="hidden" name="number" value="<%=price%>">
答案 0 :(得分:2)
某些欧洲国家(包括德国)使用,
作为小数点分隔符,使用.
作为分组分隔符(千位分隔符)。因此,相同的数字12345.678
可以有不同的表示形式:
12,345.678 (US)
12.345,678 (Germany)
您可以检查小数点分隔符和分组分隔符,如下所示:
Locale[] locales = Locale.getAvailableLocales();
for(Locale l : locales) {
DecimalFormatSymbols s = ((DecimalFormat)DecimalFormat.getInstance(l))
.getDecimalFormatSymbols();
System.out.printf("%s:\t%s\t%s\n",
l.getDisplayCountry(),
s.getGroupingSeparator(),
s.getDecimalSeparator());
}
由于这个原因,字符串1,255,000,000
在美国语言环境中解析为1255000000
,在DE(德国)语言环境中解析为1.255
。