在java中为各种语言环境格式化给定货币? (舍入问题)

时间:2013-04-13 00:41:00

标签: java format locale currency

我正在尝试根据接受语言标题格式化货币,但我遇到了一些麻烦。

  1. 英美用户将了解€10,000,000.15但不适用于德国等值,€10.000.000,15

  2. 另一方面,对于英美用户来说,“23,123美元看起来很好”,但“23,123.00美元”看起来很奇怪。 “JPY23,123.00”也是如此。后者是我使用以下代码获得的:

     java.text.NumberFormat format = java.text.NumberFormat.getCurrencyInstance(java.util.Locale.US);
     format.setCurrency(java.util.Currency.getInstance("JPY"));
    
  3. 更令人不安的是当我在ja_JP中显示USD时发生的舍入。 如果我格式化7.95,它只显示为“USD8”而不是“USD7.95”

  4. 有什么简单的方法可以避免这种情况吗?是否有更好的格式化货币库?我应该将其格式化为区域设置的数字(如果货币不是区域设置的默认值),然后添加货币代码或符号吗?

1 个答案:

答案 0 :(得分:3)

默认情况下,1100000.15欧元打印为Locale.US的EUR10,000,000.15和Locale.GERMANY的10.000.000,15 €,看起来是正确的。

但7.75美元的USD8看起来甚至对日本来说都很奇怪。但这可以修复:

    NumberFormat format = NumberFormat.getCurrencyInstance(locale);
    format.setCurrency(currency);
    format.setMaximumFractionDigits(currency.getDefaultFractionDigits());
    System.out.println(format.format(7.95));

它为JAPAN / USD打印USD7.95,为US / JPY打印JPY8