numberrtl语言环境(如阿拉伯语)中负数的格式化问题


Locale locale = new Locale("ar", "AE");
NumberFormat format = NumberFormat.getNumberInstance(locale);                
System.out.println(format.parse("55-"));

上面的代码在JDK 8时返回-55,在11时返回55。另外,format.parse("-55")会抛出parseException。知道为什么会这样吗?如何解析负数在阿拉伯语(RTL)与java 11?

从Java 9开始,JDK优先考虑CLDR区域设置数据。(Unicode通用区域数据存储库)

如果您想在Java 8中看到这种行为,您可以使用命令行参数-Djava.locale.providers=COMPAT,SPI,CLDR

这样,它将使用旧的"COMPAT"如果COMPAT没有本地数据,则只使用SPI或CLDR。

https://www.oracle.com/java/technologies/javase/9-relnotes.html jdk - 8008577

同样的java更改也会影响瑞典解析负数,德国解析一周的第一天,可能还会影响许多其他事情。

相关内容

  • 没有找到相关文章

最新更新