Java 11 和 Java 8 之间的差异 DecimalFormat 行为
Discrepancies between Java 11 and Java 8 DecimalFormat behaviour
Java11 我有一个奇怪的问题。我正在移植一个巨大的项目,我有一些使用 DecimalFormat 的测试在 11 版本上失败,但在 8 版本上没有。
DecimalFormat in Java 11 给我一个逗号小数点分隔符,而在 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));
}
}
在 Java 8 上输出 1.02
,在 Java 11 上输出 1,02
。
这是构建的整个终端会话和运行两个版本的示例:
~ » 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 之间的相关 类 是否有任何更改会导致此问题?
是的,其中一项更改是将区域设置数据更新为 Unicode CLDR v33(参见 https://www.oracle.com/java/technologies/javase/jdk-11-relnote.html)
此更改与特定于语言环境的格式相关,这会影响 DecimalFormat
或 SimpleDateFormat
等实用程序的使用。
因此,如果您的代码依赖于特定于语言环境的格式,您应该在切换到 Java 11.
后仔细检查它
Java11 我有一个奇怪的问题。我正在移植一个巨大的项目,我有一些使用 DecimalFormat 的测试在 11 版本上失败,但在 8 版本上没有。
DecimalFormat in Java 11 给我一个逗号小数点分隔符,而在 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));
}
}
在 Java 8 上输出 1.02
,在 Java 11 上输出 1,02
。
这是构建的整个终端会话和运行两个版本的示例:
~ » 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 之间的相关 类 是否有任何更改会导致此问题?
是的,其中一项更改是将区域设置数据更新为 Unicode CLDR v33(参见 https://www.oracle.com/java/technologies/javase/jdk-11-relnote.html)
此更改与特定于语言环境的格式相关,这会影响 DecimalFormat
或 SimpleDateFormat
等实用程序的使用。
因此,如果您的代码依赖于特定于语言环境的格式,您应该在切换到 Java 11.
后仔细检查它