Java覆盖特定区域设置的区域设置

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

让我解释一下,当格式化-125时,我得到荷兰语“€125-”(预计为“ – 125欧元”)。 英国按预期工作“ – 125.50英镑”。

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

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

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

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

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

您可以构建自己的自定义格式。 看看以下链接:

http://docs.oracle.com/javase/tutorial/i18n/format/decimalFormat.html

使用applyPattern方法:

 final DecimalFormat df = (DecimalFormat)NumberFormat.getCurrencyInstance(locale); df.applyPattern("¤#,##0.##");