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가 동일해야 함에도 불구하고 "a와 b가 동일하지 않음"을 반환합니다.
불일치 이유
이러한 불일치는 부동 소수점의 특성에서 발생합니다. 산술. 부동 소수점 값은 실제 숫자 값에 근접할 수 있는 이진 형식의 숫자를 나타냅니다. 결과적으로 부동 소수점 숫자에 대한 연산으로 인해 작은 오류가 발생할 수 있어 정확한 비교가 불가능해집니다.
올바른 접근 방식
이 문제를 방지하려면 다음과 같은 경우 허용오차 값을 사용하세요. 수레 비교. 이 공차는 동일하다고 간주되는 두 값 사이의 허용 가능한 최대 차이를 나타냅니다. 예:
if (abs(($a - $b) / $b) < 0.00001) { echo 'a and b are same'; } else { echo 'a and b are not same'; }
이 경우 $a와 $b의 절대 차이를 $b로 나눈 값이 0.00001보다 작으면 값이 동일한 것으로 간주됩니다. 애플리케이션에 필요한 정밀도에 따라 공차 값을 조정하세요.
위 내용은 PHP의 부동 소수점 비교가 때때로 실패하는 이유는 무엇이며 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!