如何检查Java 8中的负零?

Axi*_*xim 4 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));
Run Code Online (Sandbox Code Playgroud)

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

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

Ale*_*lex 16

你的问题是你正在使用y = -0而不是y = -0.0.0是一个整数文字并且没有-0 int值,它只是保持0然后被加宽+0.0d.你也可以-(double)0用来在否定之前进行加宽并获得相同的结果-0.0.