私はdouble値が-0.0d
かどうかを判断する方法を見つけようとしています。私は少し問題を探って、いくつかの異なるアプローチを見つけましたが、私が見つけたすべてのスレッドは少なくとも2歳であり、もはや動作しないようです。Java 8で負のゼロをチェックするにはどうすればよいですか?
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と-0を区別する理由があります。 。
"負のゼロ"は実際に意味をなさない。ゼロは肯定的でも否定的でもない。 – David
これはcop-outのように聞こえるかもしれませんが、なぜ入力を 'String'として読み込み、' -0'をチェックし、そうでなければdoubleとして解析するのでしょうか? –
あなたは既に 'Double.doubleToRawLongBits(0.0)== Double.doubleToRawLongBits(-0.0);'を提案しましたか?[here](http://stackoverflow.com/a/14771363/205233)? – Filburt