내 PHP 부동 소수점 계산 결과가 \'성공\' 대신 \'오류\'인 이유는 무엇입니까?

Linda Hamilton
풀어 주다: 2024-10-30 16:44:03
원래의
599명이 탐색했습니다.

Why Does My PHP Float Calculation Result in

PHP 부동 소수점 계산의 악명 높은 정밀도 함정

수치 데이터를 처리할 때는 정밀도가 가장 중요합니다. 그러나 PHP의 부동 소수점 데이터 유형은 매우 까다로울 수 있으며 계산에서 예상치 못한 부정확성을 초래할 수 있습니다.

다음 PHP 코드 조각을 고려하세요.

<code class="php">$fooValue = 100.68;
$cowValue = 100.67;

$diffValue = $fooValue - $cowValue;
if($diffValue <= 0.01) {
    echo("success");
} else {
    echo("error");
}</code>
로그인 후 복사

놀랍게도 이 코드는 대신 "error"를 인쇄합니다. 예상되는 "성공".

원인: 부동 소수점 부정확성

범인은 부동 소수점 데이터 유형의 본질적인 부정확성입니다. 바이너리로 변환하거나 바이너리로 변환할 때 정밀도가 손실될 수 있습니다. 따라서 부동 소수점 값을 정확하게 비교하는 것은 신뢰할 수 없습니다.

정밀 계산을 위한 솔루션

이 문제를 해결하려면 다음 접근 방식을 고려하세요.

  • BC Math: 임의 정밀도 연산을 위해 BC Math 라이브러리를 사용하세요. 정확한 계산을 위해 특별히 설계된 기능을 제공합니다.
  • GMP: 정수 기반 고성능 계산을 위해 GMP 라이브러리를 사용하세요. 소수는 지원하지 않지만 정수로의 변환은 때때로 정밀도를 유지할 수 있습니다.

추가 팁:

  • 엄격한 경우 부동소수점 비교를 피하세요. 평등. 대신 잠재적인 부정확성을 설명하는 작은 허용 오차 임계값을 선택하십시오.
  • 가능하다면 돈이나 정확성이 요구되는 기타 값과 관련된 계산에는 부동 소수점 대신 정수를 사용하십시오.
  • 제한 사항에 유의하세요. 부동 소수점 데이터 유형을 사용하고 항상 계산의 정밀도 요구 사항을 고려하십시오.

위 내용은 내 PHP 부동 소수점 계산 결과가 \'성공\' 대신 \'오류\'인 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!