java 中是否有任何库可以格式化货币值?

Is there any library to format currency values in java?

我有双倍的货币代码和价值。需要为 Currencies.I 尝试使用 NumberFormat 和 Locale 进行格式化,但在这种情况下,例如 EURO 具有与国家相关的不同 Locale。我怎样才能做到这一点?欧元有通用格式吗?

       format.setCurrency(Currency.getInstance("EUR"));
       format.setMaximumFractionDigits(2);
       
       System.out.println(format.format(dbl));

Locale[] locales = NumberFormat.getAvailableLocales();

       for(Locale lo : locales){
           NumberFormat format = NumberFormat.getCurrencyInstance(lo);
           if(NumberFormat.getCurrencyInstance(lo).getCurrency().getCurrencyCode().equals("EUR")){
          
               System.out.println(    NumberFormat.getCurrencyInstance(lo).getCurrency().getCurrencyCode()+"-"+lo.getDisplayCountry() +"-"+NumberFormat.getCurrencyInstance(lo).getCurrency().getSymbol() +format.format(dbl));  

           }
       }```

在您检查显示欧元值的不同格式之前,让 Java 为您进行转换。

这样使用java.text.NumberFormatclass:

NumberFormat currFormatter = NumberFormat.getCurrencyInstance(Locale.GERMANY);
double money = 2000000;
System.out.println(currFormatter .format(money));

以上代码输出:

2.000.000,00 €

根据需要选择Locale

我一直在使用 icu4j 库,它非常适合这个目的。它有许多数字格式化程序,包括货币格式化程序。请检查以下代码:

final com.ibm.icu.text.NumberFormat rule = RuleBasedNumberFormat.getCurrencyInstance(new Locale("en", "EU"));
System.out.println(rule.format(1054979.30));

它将打印:€1,054,979.30

有许多配置可以帮助您调整输出。

编辑:

如果你想根据那个传递货币代码和格式,下面是它的代码:

final com.ibm.icu.text.NumberFormat rule = RuleBasedNumberFormat.getCurrencyInstance();
rule.setCurrency(Currency.getInstance("EUR"));
System.out.println(rule.format(1054979.30));