2016-10-08 4 views
1

저는 정말로 다음 코드가 항상 7을 반환하는 이유를 알고 싶습니다. 정말 혼란 스럽습니다.이 표현식이 항상 7을 반환하는 이유는 무엇입니까?

$a = (double) ((0.1 + 0.6) * 10); //Output: 7 
$b = (int) ((0.1 + 0.6) * 10); //Output: 7 
$c = (int) ((0.1 + 0.7) * 10); //Output: 7 

출력 테스트 :

echo ($a == $b && $a == $c); //Output: true 
+0

참조 http://stackoverflow.com/questions/3726721/php-floating-number-precision – jeroen

답변

4
$a = (double) ((0.1 + 0.6) * 10); //Output: 7 
$b = (int) ((0.1 + 0.6) * 10); //Output: 7 
$c = (int) ((0.1 + 0.7) * 10); //Output: 7 

이론적 (0.1 + 0.7) * 10 부분 (8) 평가해야하지 제

스크립트의 식 출력은 7 평가합니다 PHP 때문에 엔진은 표현식의 값을 내부적으로 7 대신 7.999999로 저장합니다.

그리고 분수 값이 정수로 변환되면 PHP 엔진은 소수 부분을 자릅니다.

+0

고맙습니다! 나는 몇 번 읽은 후에 그것을 이해했다. –

관련 문제