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

Žyg*_*tas 30 java currency number-formatting

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

age*_*ped 38

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

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

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


Gen*_*diy 24

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

DecimalFormat format = new DecimalFormat("$#,##0.00;$-#,##0.00");
String formatted = format.format(15.5);
Run Code Online (Sandbox Code Playgroud)

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


Žyg*_*tas 0

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

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

查看NumberFormatter的 API 文档以获取更多详细信息。