我需要根据区域设置正确格式化货币,但我们的客户不同意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 $
答案 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