【问题标题】:Is there any library to format currency values in java? [closed]是否有任何库可以在 java 中格式化货币值? [关闭]
【发布时间】:2021-08-11 06:12:27
【问题描述】:

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

       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));  

           }
       }```

【问题讨论】:

  • 你需要添加一些你尝试过的代码,但是怎么样
  • String newStr = oldStr.replaceAll("[^\\d.]+", "")
  • 使用 Java 货币和货币 API 执行此操作:javamoney.github.io

标签: java format currency


【解决方案1】:

我已经使用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));

【讨论】:

  • 这个库是否支持货币代码作为输入而不是语言环境
  • 是的。检查我编辑的答案。
  • 感谢更新,这个库是开源的还是许可的?但通常以这种格式指定的欧元值(“###.##0,00”)对吗?
  • 它是开源的。这是它的链接 - ibm.com/docs/en/informix-servers/…
  • 所以你的意思是说应该是点(.)而不是逗号(,)作为数字分隔符?
【解决方案2】:

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

以这种方式使用java.text.NumberFormat 类:

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

以上代码输出:

2.000.000,00 €

根据您的需要选择Locale

【讨论】:

  • @user16320675 当我回答时,问题中根本没有代码。所以我想OP对NumberFormat一无所知
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-22
  • 1970-01-01
  • 2012-01-29
相关资源
最近更新 更多