>  기사  >  백엔드 개발  >  PHP의 php.ini 정밀 설정이 정확한 두 자리 화폐 계산을 보장할 수 있습니까?

PHP의 php.ini 정밀 설정이 정확한 두 자리 화폐 계산을 보장할 수 있습니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-06 12:27:03229검색

 Can PHP's php.ini Precision Setting Guarantee Accurate Two-Digit Monetary Calculations?

PHP의 php.ini 정밀 해결 방법으로 부동 소수점 문제를 해결할 수 있습니까?

부동 소수점 계산은 대부분의 분수를 이진수로 표현하기 때문에 부정확할 수 있습니다. 정밀도에 대한 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

두 자리 화폐 계산에 가장 적합한 Php.ini.precision 값

질문 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.