如何检查Java 8中的负零?

时间:2016-10-08 14:52:23

标签: java java-8

我一直在试图弄清楚如何确定双值是-0.0d。我搜索了一下这个问题并发现了一些不同的方法,但是我找到的所有线程至少有几年的历史,似乎已经不再有用了。

这是我到目前为止所尝试的内容:

double x, y;
x = 0;
y = -0;

println(x == y);
println(Double.compare(x, y) == 0);
println(new Double(x).equals(new Double(y)));
println(Double.doubleToLongBits(x) == Double.doubleToLongBits(y));
println(Math.signum(x) == Math.signum(y));

不幸的是,所有这些都打印true

我需要区分0和-0的原因,如果你想知道,是因为我试图从用户输入解析一个double值,并且在异常的情况下使用-0作为sentinel值。

1 个答案:

答案 0 :(得分:16)

您的问题是您使用的是y = -0而不是y = -0.00integer literal,没有-0 int值,只有0,然后是widened+0.0d 。你也可以使用-(double)0在否定之前进行扩展,得到与-0.0相同的结果。