2016-10-08 1 views
3

이중 값이 -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을 구별해야하는 이유가 있습니다. .

+1

"음수 0"은 실제로 의미가 없습니다. 0은 양수도 아니고 음수도 아닙니다. – David

+2

이것은 cop-out처럼 들릴지 모르겠지만, 입력을'String'으로 읽지 않고,'-0'을 검사하고, 그렇지 않다면 그것을 double로 해석할까요? –

+1

제안 된 [here] (http://stackoverflow.com/a/14771363/205233)에서 이미'Double.doubleToRawLongBits (0.0) == Double.doubleToRawLongBits (-0.0);을 시도 했습니까? – Filburt

답변

16

y = -0.0 대신 y = -0을 사용하고 있습니다. 그냥 0을 유지하고 우선은 또한 부정하기 전에 확대 할 -(double)0를 사용 -0.0과 같은 결과를 얻을 수 widened+0.0d에있다, 0integer literal하고 더 -0int 값이 없습니다.

+0

방금 ​​테스트 한 결과 문제를 해결할 수 있는지 확인할 수 있습니다. –

+0

고마워, 그게 정말로 문제 였어. – Axim

+1

예 정수는 음수가 0이 아니므로 -0은 단지 0입니다. -0.0은 두 배이고 음수는 +1입니다. –

관련 문제