我正在尝试根据接受语言标题格式化货币,但我遇到了一些麻烦。
英美用户将了解€10,000,000.15但不适用于德国等值,€10.000.000,15
另一方面,对于英美用户来说,“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"));
更令人不安的是当我在ja_JP中显示USD时发生的舍入。 如果我格式化7.95,它只显示为“USD8”而不是“USD7.95”
有什么简单的方法可以避免这种情况吗?是否有更好的格式化货币库?我应该将其格式化为区域设置的数字(如果货币不是区域设置的默认值),然后添加货币代码或符号吗?
答案 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