负数不是用减号显示的,而是用反符号显示的



语言:Java

概念:数字格式

实施:国际化

问题:当我试图格式化货币实例中的负数时;en_US";区域设置,结果显示在括号中。

示例:输入:1234567.89

实际产量:($123467.89(

预期产出:-1234567.89美元或-1234567.9美元,以正确者为准。

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

问题:

  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.

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

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