负数不以减号显示,而是以括号显示

Negative numbers are not displayed with minus sign, instead it is displayed with paranthesis

语言:Java

概念:数字格式

实施:国际化

问题:当我尝试在“en_US”语言环境的货币实例中格式化负数时,结果显示在括号中。

示例: 输入:1234567.89

实际产出:($1234567.89)

预期输出:$-1234567.89 或 -$1234567.89,以正确者为准。

** 注意:我知道这是一种会计风格,这就是为什么我试图覆盖标准风格但结果仍然相同 **

问题:

  1. 为什么没有应用默认货币格式 - “标准”
  2. 需要没有模式的修复,因为模式会因区域设置而异。

下面是代码:

Locale currLocale = new Locale.Builder().setLanguageTag("en-US").setExtension(Locale.UNICODE_LOCALE_EXTENSION,"cf-standard").build();
DecimalFormat numFormat = (DecimalFormat) NumberFormat.getCurrencyInstance(currLocale);
System.out.println(numFormat.format(amount4));

Any help is appreciated.

尝试在 sys println 之前添加这两行:

    numFormat.setNegativePrefix("-");
    numFormat.setNegativeSuffix("");

经过一番研究,发现它依赖于JDK版本。在 JDK 8 之前,Java 从 localProviderADapter 检索区域设置,因为默认设置是 JRE。支持的货币格式只有 accounting style 直到 8,这意味着括号将是默认值,没有其他选项。后来随着 JDK 增强,区域设置默认提供程序从 JRE 更改为 CLDR,从 JDK 9 开始,因此货币格式的标准样式是默认的。后来从JDK14开始,既有默认的-记账风格,又提供了配置标准风格的选项。

因此,如果您在 JDK 8 中并且需要内置库或配置选项来将括号格式化为 -ve 符号,那么您将需要升级到 JDK 9 及更高版本。 谢谢。