java—负数不以负号显示,而是以负号显示

cidc1ykv  于 2021-06-27  发布在  Java
关注(0)|答案(2)|浏览(461)

语言:java
概念:数字格式
实施:国际化
问题:当我尝试在currency示例中为“en\u us”区域设置负数格式时,结果显示在括号中。
示例:输入:1234567.89
实际产出:($1234567.89)
预期产出:$-1234567.89或-$1234567.89,以正确者为准。

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

问题:
为什么不应用默认货币格式-“标准”
需要不带模式的修复,因为模式会因区域设置而异。
代码如下:

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.
mwg9r5ms

mwg9r5ms1#

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

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

pxq42qpu2#

经过研究,发现它依赖于jdk版本。在jdk8之前,java从localprovideradapter检索locale,因为默认值是jre。支持的货币格式在8之前只是会计样式,这意味着括号将是默认值,没有其他选项。后来随着jdk的增强,locale默认提供程序从jre更改为cldr,从jdk9开始,因此货币格式的标准样式是默认的。从JDK14以后,我们有了默认的-accounting样式,并提供了配置标准样式的选项。
因此,如果您在JDK8中,并且需要一个内置库或配置选项来格式化括号到-ve符号,那么您将需要升级到JDK9及更高版本。谢谢。

相关问题