gpt4 book ai didi

Java 10 NumberFormat 无法解析指数格式的 double

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:47:12 27 4
gpt4 key购买 nike

我最近从 Java 8 升级到 Java 10。我遇到了一个使用 Java 10 的失败测试,​​我不确定如何处理。我们有一些代码使用 java.text.NumberFormat.getInstance() 将 double 值的 String 表示形式解析为 double 值。在值以指数形式写入的情况下,使用 Java 10 时解析值不正确。

这是我的 JUnit 测试:

@Test
public void testMe() throws ParseException {
String input = "2.0E-4";
double output = NumberFormat.getInstance().parse(input).doubleValue();
System.out.println(output);
}

使用 Java 8 时,double 变量正确设置为 0.0002:

Screenshot of Java 8 run

使用 Java 10 时,double 值被错误地设置为 2.0:

Screenshot of Java 10 run

有谁知道这是否是 Java 方面的有意更改?


虽然 Double.valueOf() 似乎正确解析了它。

最佳答案

从 JDK 9 开始,默认语言环境数据使用从 Unicode 联盟的通用语言环境数据存储库 (CLDR) 派生的数据。因此,Java 9 及更高版本中的某些语言环境发生了变化。请参阅 Java 9 的发行说明和相应的JEP 252 .

引用exponential symbol在 CLDR 数字符号图表中,对于 en_AU,指数符号是 e(小写)而不是 E(大写)。因此,输出的差异。

String input = "2.0e-4";
double output = NumberFormat.getInstance().parse(input).doubleValue();
System.out.println(output);

将给出预期的输出:

java version "10.0.1" 2018-04-17
Java(TM) SE Runtime Environment 18.3 (build 10.0.1+10)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10.0.1+10, mixed mode)
2.0E-4

关于Java 10 NumberFormat 无法解析指数格式的 double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51092071/

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