NumberFormat.getCurrencyInstance()的Currency格式基于什么标准?

时间:2016-01-14 12:44:10

标签: java currency number-formatting

我需要根据区域设置正确格式化货币,但我们的客户不同意Java基于某些区域设置所做的默认格式。

基于Java用于NumberFormat.getCurrencyInstance()返回的NumberFormat的格式是什么标准,如果有的话,是否记录在任何地方?

下面是一些示例代码,显示了Java如何基于Locale格式化货币。

public static void main(String[] args)
{
    displayCurrency(Locale.ENGLISH);
    displayCurrency(Locale.FRENCH);
    displayCurrency(Locale.ITALIAN);
}

static public void displayCurrency( Locale currentLocale) {

    Double currencyAmount = new Double(9876543.21);

    DecimalFormatSymbols symbol = new DecimalFormatSymbols(currentLocale);
    symbol.setCurrencySymbol("$");

    DecimalFormat currencyFormatter = (DecimalFormat) 
        NumberFormat.getCurrencyInstance(currentLocale);
    currencyFormatter.setDecimalFormatSymbols(symbol);

    System.out.println(
        currentLocale.getDisplayName() + ": " +
        currencyFormatter.format(currencyAmount));
}

输出:

English: $9,876,543.21
Italian: $ 9.876.543,21
French: 9 876 543,21 $

2 个答案:

答案 0 :(得分:1)

Java中的I18n由UNICODE标准定义,因此您可以在http://www.unicode.org/cldr/charts/latest/supplemental/detailed_territory_currency_information.html找到有关如何格式化货币的信息

在源代码中,相同的信息存储在JDK rt.jar和localedata.jar文件中,包sun.util.resources和sun.text.resources(文件名为CurrencyNames_xx_XX.class)

答案 1 :(得分:-1)

可能需要使用您正在使用的JVM的默认电流。在jre的lib文件夹中有一个文件currency.data