부동 소수점 계산은 대부분의 분수를 이진수로 표현하기 때문에 부정확할 수 있습니다. 정밀도에 대한 php.ini 설정을 사용하면 PHP가 부동 소수점 값을 계산하는 자릿수를 지정할 수 있습니다.
질문 1: 정확한 두 자리 금전적 계산에 의존할 수 있는 해결 방법이 있습니까?
답변 1: 아니요. php.ini 정밀도 설정은 정확한 두 자리 계산을 보장하지 않습니다.
질문 2: 해결 방법이 실패한 예를 제공해 주실 수 있습니까?
예:
ini_set('precision', 8); $a = 5.88; // cost per kg $q = 2.49; // quantity purchased (2.49 kg) $b = $a * 0.01; // 10% discount on first kg echo ($a * $q) - $b; // result not precisely two digits
질문 3: 두 자리 화폐 계산에 적합한 php.ini.precision 값은 무엇인가요? 금전적 계산?
답변 3: 재무 계산에 php.ini 정밀도를 사용하는 것은 권장되지 않습니다. bcmmath 또는 number_format과 같은 대체 솔루션을 고려하십시오.
예제 코드:
ini_set('precision', 20); // set to 20 $a = 342349.23; $b = 341765.07; echo $a - $b, PHP_EOL; echo floatval(round($a - $b, 2)), PHP_EOL; echo number_format($a - $b, 2), PHP_EOL; echo bcsub($a, $b, 2), PHP_EOL;
출력:
584.15999999997438863 584.15999999999996817 // round is not reliable 584.16 584.15 // bcsub is more precise with precision=20
결론:
정확한 두 자리 계산에서는 php.ini 정밀도 해결 방법에 의존하는 것이 신뢰할 수 없습니다. 정확한 재무 계산을 위해 bcmmath 또는 number_format 사용을 고려해 보세요.
질문 1: 0에서 999999.99 사이의 숫자에 대한 해결 방법이 실패합니까?
답변 1: 조합 수가 많아 완전한 테스트는 불가능합니다. 그러나 0.19 0.16 ... 0.01을 사용한 간단한 테스트에서는 정밀도가 8로 설정된 예상치 못한 결과(1.0408341E-17)가 발생하여 해결 방법이 완전히 신뢰할 수 없음을 나타냅니다.
질문 2: 해결 방법이 실패할 시기를 어떻게 예측할 수 있습니까?
답변 2: 수학 공식이 존재하지만 복잡할 수 있으며 실패 지점을 결정하는 데 항상 실용적이지는 않습니다.
위 내용은 PHP의 php.ini 정밀 설정이 정확한 두 자리 화폐 계산을 보장할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!