1

可以说我有以下代码:

 NumberFormat formatter = DecimalFormat.getInstance(Locale.getDefault());
  System.out.println(formatter.getMaximumFractionDigits());
  Locale l = Locale.getDefault();
  System.out.println(l.getCountry());

这打印 3. 和国家 US

如果我将语言环境更改为(“sv”,“SE”),它仍然会打印 3。AND SE

我在一台Windows机器上。如果我通过控制面板查看区域设置并查看“美国英语”或“瑞典瑞典”,则会显示这两个国家的“小数点后位数”均为 2。

NumberFormat 类选择的默认值在哪里?分数如何以 3 结束?

4

2 回答 2

1

格式化货币时小数点后的位数为 2,但其他用途为 3:

NumberFormat formatter = NumberFormat.getCurrencyInstance();
System.out.println(formatter.getMaximumFractionDigits()); // often 2

在 OpenJDK 7 中,位数来自国家/地区的货币数据。货币数据以二进制格式存储在安装 JDKcurrency.datalib目录中调用的文件中,因此更改 Windows 首选项中小数点后显示的位数对 Java 应用程序没有影响。如果您更改国家/地区,但您会看到它会NumberFormat适应:

NumberFormat formatter = NumberFormat.getCurrencyInstance(Locale.JAPAN);
System.out.println(formatter.getMaximumFractionDigits()); // 0
于 2013-09-25T17:03:23.520 回答
0

该值的来源是区域设置,区域设置数据位于 JVM 文件夹 %JAVA_HOME%/jre/lib/ext/localedata.jar 的 jar 中

于 2013-09-25T17:10:03.990 回答