我正在使用用 Java 构建的显示数字的第 3 方软件。该软件是多语言的,我们使用的其中一种语言是 Euskera (eu, eu_ES)。此语言中的数字格式显示错误(123,456.89 而不是 123.456,89)。
更深入地搜索和反编译一些类,我发现数字格式是用 DecimalFormatSymbols
和 DecimalFormat
完成的,所以我做了一个 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/