如何解决负数不以减号显示,而是以括号显示
语言:Java
概念:数字格式
实施:国际化
问题:当我尝试为“en_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.
解决方法
尝试在 sys println 之前添加这两行:
numFormat.setNegativePrefix("-");
numFormat.setNegativeSuffix("");
,
经过一番研究,发现它依赖于JDK版本。在 JDK 8 之前,Java 从 localProviderADapter 检索语言环境,因为默认值为 JRE。支持的货币格式只有会计风格,直到 8 这意味着括号将是默认值,没有其他选项。后来随着 JDK 增强,语言环境默认提供程序从 JRE 更改为 CLDR,从 JDK 9 开始,因此货币格式的标准样式成为默认值。后来从 JDK 14 开始,我们既有默认设置的 -accounting 样式,也提供了配置标准样式的选项。
因此,如果您使用的是 JDK 8 并且需要一个内置库或配置选项来将括号格式化为 -ve 符号,那么您将需要升级到 JDK 9 及更高版本。 谢谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。