이중 값이 -0.0d
인지 확인하는 방법을 알아 내려고 노력했습니다. 내가 문제를 조금 봤어 몇 가지 접근 방식을 발견하지만, 내가 찾은 모든 스레드는 적어도 몇 세 였고 더 이상 작동하지 않는 것 같습니다.Java 8에서 음수 0을 확인하려면 어떻게합니까?
는 여기에 지금까지 시도한 작업은 다음과 같습니다
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
모두를 불행하게도.
내가 사용자 입력에서 double 값을 구문 분석하려고하고 예외의 경우 -0을 sentinel 값으로 사용하려고하기 때문에 궁금한 점이 있다면 0과 -0을 구별해야하는 이유가 있습니다. .
"음수 0"은 실제로 의미가 없습니다. 0은 양수도 아니고 음수도 아닙니다. – David
이것은 cop-out처럼 들릴지 모르겠지만, 입력을'String'으로 읽지 않고,'-0'을 검사하고, 그렇지 않다면 그것을 double로 해석할까요? –
제안 된 [here] (http://stackoverflow.com/a/14771363/205233)에서 이미'Double.doubleToRawLongBits (0.0) == Double.doubleToRawLongBits (-0.0);을 시도 했습니까? – Filburt