부동 소수점 산술은 종종 오해를 받는 복잡한 주제로 현대 컴퓨터 시스템에 널리 퍼져 있습니다. 대부분의 분수에는 정확한 이진 표현이 부족하므로 반올림이 불가피하게 발생합니다. "모든 컴퓨터 과학자가 부동 소수점 산술에 대해 알아야 할 사항"에 설명된 대로 부동 소수점 연산의 미묘한 차이를 이해하는 것이 중요합니다.
답변: 아니요, PHP에 의존할 수 없습니다. 계산 중에 정밀도 길이가 증가할 수 있으므로 10^6 미만의 숫자에 대해서도 일관된 2자리 정확도를 위한 ini 정밀도 설정입니다.
답변: 첫 번째 킬로그램에만 10% 할인이 적용되는 다음 예를 생각해 보세요.
ini_set('precision', 8); // Your precision $a = 5.88; // Cost of 1kg $q = 2.49; // User buys 2.49 kg $b = $a * 0.01; // 10% Discount only on the first kg echo ($a * $q) - $b;
출력: 14.5824 <- --- 정확한 2자리 계산이 아님
답변: PHP 정밀도 설정은 재무 계산이나 부동 소수점 정밀도에 대한 신뢰할 수 있는 기반이 아닙니다. 전문적인 라이브러리나 메소드를 사용하는 것이 좋습니다.
정확도 제한을 설명하기 위해 다양한 예를 살펴보겠습니다.
$a = 342349.23; $b = 341765.07; // Example A: precision = 20 echo $a - $b, PHP_EOL; // 584.15999999997438863 echo floatval(round($a - $b, 2)), PHP_EOL; // 584.15999999999996817 (rounding introduces instability) echo number_format($a - $b, 2), PHP_EOL; // 584.16 echo bcsub($a, $b, 2), PHP_EOL; // 584.15 // Example B: precision = 14 echo $a - $b, PHP_EOL; // 584.15999999997 echo floatval(round($a - $b, 2)), PHP_EOL; // 584.16 echo number_format($a - $b, 2), PHP_EOL; // 584.16 echo bcsub($a, $b, 2), PHP_EOL; // 584.16 // Example C: precision = 6 echo $a - $b, PHP_EOL; // 584.16 echo floatval(round($a - $b, 2)), PHP_EOL; // 584.16 echo number_format($a - $b, 2), PHP_EOL; // 584.16 echo bcsub($a, $b, 2), PHP_EOL; // 584.00 // Example D: precision = 3 echo $a - $b, PHP_EOL; // 584 echo floatval(round($a - $b, 2)), PHP_EOL; // 584 echo number_format($a - $b, 2), PHP_EOL; // 584.16 (consistent) echo bcsub($a, $b, 2), PHP_EOL; // 0.00
이러한 예는 정확한 계산을 위해 PHP 정밀도 설정에 의존하는 데 따른 불일치를 보여줍니다.
신뢰할 수 있는 재무 계산을 위해서는 부동 소수점 및 센트 사용을 잊어버리세요. 일관된 2자리 정확도를 위해 number_format 함수를 고려하세요.
ini_set('precision', 8); $a = 0.19; $b = 0.16; $c = 0.01; $d = 0.01; $e = 0.01; $f = 0.01; $g = 0.01;
위 내용은 정확한 돈 계산을 위해 PHP의 `php.ini` 정밀도를 신뢰할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!