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

java.NumberFormat如何为区域设置获取其默认值,java,number-formatting,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”)

假设我有以下代码:

 NumberFormat formatter = DecimalFormat.getInstance(Locale.getDefault());
  System.out.println(formatter.getMaximumFractionDigits());
  Locale l = Locale.getDefault();
  System.out.println(l.getCountry());
这张照片是3张。美国

如果我将区域设置更改为(“sv”、“SE”),它仍然打印3。和SE

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


NumberFormat类在哪里选择默认值?分数的值怎么会是3?

设置货币格式时,小数点后的位数是2,但出于其他目的,小数点后的位数是3:

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

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

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

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

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

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