개발 꿀팁/PHP

php 비교 부동 소수점 수

Jammie 2022. 9. 22. 15:17
반응형

php 매뉴얼에는 두 부동소수점 수가 동일한지 여부를 절대 비교하지 말라는 문구가 있지만 실제 상황에서는 부동소수점 수에 대한 연산 및 비교가 포함될 수 있으며 이 경우 BC Math 확장 함수 또는 GMP 함수를 사용하십시오.

일반적인 상황을 살펴보겠습니다

<?php
$a = 1.3;
$b = 1.2;
$c = 0.1;
$d = $a - $b; //0.1
if ($d == $c) {
    echo '$c와 $d는 같다!<br>'
} else {
    echo '$c는 $d와 같지 않다! <br>;
}
 
printf("%.20f<br>", $d);

정상적인 사고에 따르면, 1.3-1.2는 0.1과 같으며, 비교는 동일해야 하지만, 실제 비교는 확실히 동일하지 않습니다. 부동 소수점 수의 정확도가 제한되어 있기 때문에, 연산에 오차가 생길 수 있습니다. 실제 결과 $d는 포맷 출력을 사용할 수 있습니다. $d는 실제로 0.10000000000000000882로 표시되므로 부동 소수점 수를 비교하지 말고, 만약 필요하다면, 우리는 다음과 같은 방법으로 실현할 수 있습니다

<?php
 
$a = 1.3;
$b = 1.2;
$c = 0.1;
$d = $a - $b; //0.1
 
if (bccomp($d, $c, 1) === 0) {
    echo '$c와 $d는 같다!<br>';
} else {
    echo '$c는 $d와 같지 않다!';
}

 

반응형