PHP에서 부동 소수점 숫자를 비교할 때는 표현과 정밀도의 미묘한 차이를 처리하는 것이 중요합니다. 다음 코드에서 설명한 것처럼 이는 어려울 수 있습니다.
<?php $a = 0.17; $b = 1 - 0.83; // 0.17 if ($a == $b) { echo 'a and b are same'; } else { echo 'a and b are not same'; } ?>
이 코드에서는 $a와 $b가 동일한 값을 나타내므로 if 조건이 true일 것으로 예상할 수 있습니다. 그러나 예기치 않게 false로 평가되어 $a와 $b가 동일하지 않음을 나타냅니다.
이러한 불일치의 원인은 부동 소수점 숫자의 내부 표현에 있습니다. 컴퓨터에서. 이 숫자는 근사치이며 정밀도가 제한되어 있습니다. 부동 소수점 계산을 수행할 때 작은 반올림 오류가 누적되어 동등성을 비교할 때 예상치 못한 결과가 발생할 수 있습니다.
이 문제를 해결하려면 다음을 사용하여 부동 소수점을 비교하는 것을 피해야 합니다. 동일한 값을 나타내는지 완전히 확신하지 않는 한 완전 항등 연산자(==)입니다. 대신, abs() 함수를 사용하여 허용 가능한 작은 허용 오차에 대해 두 값 간의 절대 차이를 비교하세요.
예를 들어 다음 코드를 사용하여 허용 오차 0.00001로 $a와 $b를 비교할 수 있습니다. :
if (abs(($a - $b) / $b) < 0.00001) { echo "a and b are same"; } else { echo "a and b are not same"; }
이 방법은 실용적인 목적으로 부동소수점을 비교할 수 있는 보다 안정적인 방법을 제공합니다.
위 내용은 PHP의 부동 소수점 비교가 때때로 실패하는 이유는 무엇이며 이를 올바르게 비교할 수 있는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!