java.NumberFormat如何获取区域设置的默认值

时间:2013-09-25 16:26:14

标签: java number-formatting

假设我有以下代码:

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

这会打印3.和国家/地区

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

我在Windows机器上。如果我通过控制面板查看区域设置并查看“英国美国”或“瑞典瑞典”,则表明这两个国家/地区的“十进制后的位数”为2。

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

2 个答案:

答案 0 :(得分:1)

格式化货币时,小数点后的位数为2,但出于其他目的,则为3:

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

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

NumberFormat formatter = NumberFormat.getCurrencyInstance(Locale.JAPAN);
System.out.println(formatter.getMaximumFractionDigits()); // 0

答案 1 :(得分:0)

值的来源是Locale,并且语言环境数据位于JVM文件夹中的jar中%JAVA_HOME%/ jre / lib / ext / localedata.jar