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

时间:2012-10-27 09:56:20

标签: java locale

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

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

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

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

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

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

使用applyPattern方法:

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