Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 10 NumberFormat无法以指数格式解析double_Java_Java 10 - Fatal编程技术网

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

Java 10 NumberFormat无法以指数格式解析double,java,java-10,Java,Java 10,我最近从Java8升级到Java10。我遇到了一个使用Java10的失败测试,我不知道如何处理它。我们有一些代码,它使用java.text.NumberFormat.getInstance()将双值的表示形式解析为双值。在以指数形式写入值的情况下,使用Java 10时解析的值是不正确的 以下是我的JUnit测试: @Test public void testMe() throws ParseException { String input = "2.0E-4"; double o

我最近从Java8升级到Java10。我遇到了一个使用Java10的失败测试,我不知道如何处理它。我们有一些代码,它使用
java.text.NumberFormat.getInstance()
将双值的
表示形式解析为双值。在以指数形式写入值的情况下,使用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时,双变量正确设置为0.0002:

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

有人知道这是否是Java有意的改变吗



看起来像是
Double.valueOf()
正确地解析了它。

从JDK 9开始,默认的语言环境数据使用来自Unicode联盟的公共语言环境数据存储库(CLDR)的数据。因此,在Java9和更高版本中,某些地区发生了变化。请参阅的发行说明和相应的

请参阅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

真正地有帮助。很高兴提供代码,但我也展示了测试的输出。是的,请将代码作为text.Prints提供给我。您可能带来的任何重大更改?您是否理解
NumberFormat.getInstance()
返回本地化格式?谢谢您的回答。这是有道理的。我在测试中得到了同样的结果