gpt4 book ai didi

Java DecimalFormatter - Locale DE 和 Locale US 之间的不同行为

转载 作者:行者123 更新时间:2023-12-02 06:42:35 24 4
gpt4 key购买 nike

当我在不同的区域设置中使用 Java 的 DecimalFormatter 时,我看到了奇怪的行为。如果数字是 double 值,值为 1,255,000,000(在调试器中,它显示为 1.255E9),我会将其传递给带有区域设置的 DecimalFormatter。

如果区域设置设置为 de|DE,则会将数字转换为 1.255E13。

如果区域设置设置为 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%>">

最佳答案

一些欧洲国家(包括德国)使用 , 作为小数分隔符,使用 . 作为分组分隔符(千位分隔符)。因此,相同的数字 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,在德国(德国)语言环境中被解析为 1.255

关于Java DecimalFormatter - Locale DE 和 Locale US 之间的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18994545/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com