2013-09-25 39 views
1

可以说我有下面的代码:如何java.NumberFormat拿起它的默认值区域设置

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结束?

回答

1

的小数点后的位数是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 
0

价值的来源是语言环境和语言环境数据坐落在你的JVM文件夹%JAVA_HOME%/ JRE/lib中/罐ext/localedata.jar