使用减号格式化负数美元,而不是括号(Java)

如何使用减号打印NumberFormat.getCurrencyInstance()以打印负的美元货币值?

它需要稍微调整NumberFormat.getCurrencyInstance()返回的DecimalFormat,以独立于语言环境的方式执行它。 这就是我所做的(在Android上测试):

 DecimalFormat formatter = (DecimalFormat)NumberFormat.getCurrencyInstance(); String symbol = formatter.getCurrency().getSymbol(); formatter.setNegativePrefix(symbol+"-"); // or "-"+symbol if that's what you need formatter.setNegativeSuffix(""); 

IIRC, Currency.getSymbol()可能不会为所有系统返回所有语言环境的值,但它应该适用于主要系统(并且我认为它本身具有合理的回退,因此您不必做任何事情)

以下是我总是在java类或fmt:formatNumber jstl标记中使用的结果:

 DecimalFormat format = new DecimalFormat("$#,##0.00;$-#,##0.00"); String formatted = format.format(15.5); 

它总是产生至少$ 0.00并且在显示时是一致的。 还需要包括数千个分隔符。 如果这是您的要求,您可以在美元符号前面移动减号。

如果您想要一种特定的格式而不是依赖于默认格式,那么最好创建自己的DecimalFormat

编辑:您也可以将NumberFormat.getCurrencyInstance()的结果转换为DecimalFormat并根据您的偏好进行调整。

尝试:

NumberFormat.getCurrencyInstance(Locale.CANADA);

 NumberFormat.getCurrencyInstance(Locale.UK); 

由于我再次遇到这个问题,我做了一些研究,发现ICU提供了更具弹性的解决方案:

 NumberFormatter .withLocale(...) .unit(Currency.getInstance("USD")) .sign(SignDisplay.AUTO) // "123", "0", and "-123" .format(123) .toString(); 

有关更多详细信息,请查看NumberFormatter的 API文档。