5

我正在使用NumberFormat.getCurrencyInstance().format(amount)将货币从 BigDecimal 格式化为字符串。这按预期工作,问题是我们的主要目标是荷兰市场,默认的荷兰语格式很奇怪。

让我解释一下,当格式化 -125 时,我得到荷兰语的“€ 125-”(预期为“-€ 125”)。英国按预期工作,给出“-£125.50”。

我可以检查语言环境是否是荷兰语,然后在每次我想格式化小数时提供一个模式。但我更喜欢覆盖荷兰语格式设置的解决方案。我在考虑类似以下的事情:

Locale nlLocale = new Locale("nl", "NL");
NumberFormat.getCurrencyInstance(new Locale("nl", "NL")).setFormatPattern("€ #");

这样每次我在格式化时使用荷兰语语言环境时,我都会得到我的自定义格式。是否存在类似的解决方案?

4

2 回答 2

2

撇开该特定格式是否“正确”的问题不谈,更改“nl”语言环境的货币实例的方法是实现和配置LocaleServiceProvider数字格式服务的自定义。(提供者类需要子类NumberFormatProvider化,但超类 javadoc 解释了如何配置提供者。)

NumberFormat提供者需要为您关心的特定情况返回一个非标准实例,但在其他情况下(可能)委托给默认提供者。

于 2012-10-27T10:29:14.550 回答
0

使用applyPattern方法:

final DecimalFormat df = (DecimalFormat)NumberFormat.getCurrencyInstance(locale);
df.applyPattern("¤#,##0.##");
于 2016-09-29T06:08:50.780 回答