【问题标题】:How does java.NumberFormat pick up its default values for a localejava.NumberFormat 如何获取语言环境的默认值
【发布时间】:2013-09-25 16:26:13
【问题描述】:

假设我有以下代码:

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

【问题讨论】:

    标签: java number-formatting


    【解决方案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
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-09
        • 2016-07-13
        • 2016-06-25
        • 2014-03-31
        • 1970-01-01
        • 2011-10-29
        • 2016-09-07
        相关资源
        最近更新 更多