gpt4 book ai didi

java - Java 11 和 Java 8 DecimalFormat 行为之间的差异

转载 作者:行者123 更新时间:2023-12-03 21:42:59 25 4
gpt4 key购买 nike

我在 Java 11 上遇到了一个奇怪的问题。我正在移植一个巨大的项目,我有一些使用 DecimalFormat 的测试在 11 构建上失败,但在 8 构建上没有。
Java 11 中的 DecimalFormat 给了我一个逗号小数点分隔符,而在 Java 8 上它给了我一个点。
这是一个最小的可重现示例:

import java.text.DecimalFormat;

public class Test {

public static void main(String[] args) {
DecimalFormat format = new DecimalFormat("#0.00");
System.out.println(format.format(1.02));
}
}
输出 1.02在 Java 8 和 1,02 上在 Java 11 上。
这是使用两个版本构建和运行示例的整个终端 session :
~ » sdk use java 8.0.282.hs-adpt

Using java version 8.0.282.hs-adpt in this shell.

~ » javac -version
javac 1.8.0_282

~ » javac Test.java

~ » java -version
openjdk version "1.8.0_282"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_282-b08)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.282-b08, mixed mode)

~ » java Test
1.02

~ » sdk use java 11.0.10.hs-adpt

Using java version 11.0.10.hs-adpt in this shell.

~ » javac -version
javac 11.0.10

~ » javac Test.java

~ » java -version
openjdk version "11.0.10" 2021-01-19
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.10+9)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.10+9, mixed mode)

~ » java Test
1,02
有没有人遇到过类似的问题? 8 到 11 之间的相关类(class)是否有任何更改会导致这种情况?

最佳答案

是的,其中一项更改是将区域设置数据更新为 Unicode CLDR v33(请参阅 https://www.oracle.com/java/technologies/javase/jdk-11-relnote.html)
此更改与特定于区域设置的格式相关,这会影响诸如 DecimalFormat 之类的实用程序的使用。或 SimpleDateFormat .
因此,如果您的代码取决于特定于语言环境的格式,则应在切换到 Java 11 后仔细检查它。

关于java - Java 11 和 Java 8 DecimalFormat 行为之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66335199/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com