2012-12-10 3 views
-4

가능한 중복 부동 그러나자바 더블 정밀도 소수점

double number1 = 6; 
double number2 = 5.99; 
double result = number1 - number2; 

result == 0.009999999999999787 대신 :
how to fix double precision issue in java

을 나는이 같은 코드의 작은 조각을 가지고 0.01

IEEE 754 표준 문제입니다.하지만 그 이유는 모르겠습니다. 제발 설명해 주시겠습니까? 부동 소수점 숫자가 정확히 (안 정밀 손실없이) 제한 비트 이진 시스템으로 표현 될 수 없기 때문에

+1

5.99에 가장 가까운 double 값은 5.9900000000000002131628207280300557613372802734375입니다. –

+3

당신은 부동 소수점 문제가있어, 나는 너를 위해 나쁘다고 느낀다. .99 문제가 있지만 무한 정밀도는 .01이 아닙니다. – yshavit

답변

1

부동 소수점 숫자에는 0.01이 없기 때문에. 분수 비트는 1/root 2으로 표시되므로 .0125 또는 사용자가 가지고있는 것이 있지만 부동 소수점 숫자는 .01이 아닙니다. 정확한 정밀도가 필요한 경우 대신 정수를 사용하십시오.

+3

정확한 정밀도가 필요한 경우 BigDecimal을 사용하십시오. http://docs.oracle.com/javase/1.5.0/docs/api/java/math/BigDecimal.html – KerrM

+0

@KerrM 좋은 호출입니다. 나는 자바가 당신을위한 멋진 추상화를 가지고 있다는 것을 몰랐다. – evanmcdonnal

관련 문제