java - 在 java sdk 中更改语言的 DecimalFormatSymbols 符号

标签 java decimalformat

我正在使用用 Java 构建的显示数字的第 3 方软件。该软件是多语言的,我们使用的其中一种语言是 Euskera (eu, eu_ES)。此语言中的数字格式显示错误(123,456.89 而不是 123.456,89)。

更深入地搜索和反编译一些类,我发现数字格式是用 DecimalFormatSymbolsDecimalFormat 完成的,所以我做了一个 junit 测试 以查看问题是来自此第 3 方软件还是来自 java。

Locale locale = new Locale("eu");
DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols(locale);
String pattern = "#,###.##";
DecimalFormat decimalFormat = new DecimalFormat(pattern, decimalFormatSymbols);
String formatted = decimalFormat.format(1234567.89765);
assertEquals("1.234.567,9", formatted);

运行此测试后,我看到 Java 正在以这种方式格式化。

一方面,我下载了这个第 3 方软件的最新版本,因为它是开源的,我可以做一些可行的解决方法。另一方面,我们使用的是 6 年前的版本,由于 os 系统要求而无法升级,而这个版本在 Sourceforge 的 CVS 中,我无法下载。

有什么方法可以更改 Euskera 的 Java 级别的分组分隔符小数分隔符

最佳答案

是的,你可以,但这有点麻烦。本质上,您可以创建一个自定义 NumberFormatProvider,它为 eu_ES 做一些不同的事情,并委托(delegate)给所有其他语言环境的原始提供者。您必须将其放入带有 META-INF/services/xxxx 文件的 JAR 中,并将其包含在类路径中。

看到这个问题:Java override locale setting for specific locale

这里还有更多说明:

关于java - 在 java sdk 中更改语言的 DecimalFormatSymbols 符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50483676/

相关文章:

java - 我应该更改模式以验证什么?

java - 数据访问对象 (DAO) 中的方法应该抛出还是捕获其异常?

Java Double Format即使为零也显示2个小数点

JAVA JOptionPane.showMessageDialog 十进制输出格式

java - 如何在加工中产生正弦波?

java - 清除已插入 HashMap 的对象

java - 如何在 ResourceStreamRequestHandler#configure(..) 中设置Header(迁移问题)

java - 为什么此代码中未遵循模式字符串?

java - 当小数为 0 时转换 DecimalFormat.parse() 的结果时出现 ClassCastException

javascript - AngularJS:将小数点分隔符更改为逗号