2014-04-04 2 views
-1

예를 들어 나는이 할 경우 :두 번 수행 - INT를 자바

double decPart = 5.57 - 5; 
System.out.println(decPart); 

은 0.5700000000000003을 반환을 대신 0.57의. System.out.printf ("% .2f", decPart)를 사용하여 제대로 인쇄 할 수 있지만 문제가 해결되지 않습니다 (참고 : 소수 부분은 반드시 소수 2 자리가 아닙니다). 그래서 예를 들어 나는이 작업을 수행하려고하면 :

System.out.println(1.0 - decPart); 

은 0.4299999999999997

누군가가이 문제를 어떻게 해결하는 방법을 설명시겠습니까 반환합니다. 미리 감사드립니다.

+6

읽기 [모든 컴퓨터 과학자가 부동 소수점 연산에 대해 알아야 할 사항] (영문) (http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html) – Reimeus

+0

* 정도*. –

+0

@Reimeus 아마도 100 페이지짜리 문서를 읽을 필요가없는 간단한 해결책이있을 것입니다. – djv

답변

4

이것은 floating point imprecision입니다. 부동 소수점 숫자 (float, double, Java)는 정확하게 숫자를 나타낼 수 없습니다. 절대 정밀도를 찾으려면 BigDecimal을 살펴보십시오.

+0

감사합니다. 정리하는 것이 도움이됩니다. 나는 현재 Double을 String으로 변경하고 10 진수 값을 이렇게 변경하고있다. 코딩 인터뷰]. 더 좋은 방법이 있는지 알려주세요. – user2908484

+0

그래도 십진수를 double로 나타낼 수 있다고 보장 할 수는 없습니다. – m0skit0

관련 문제