정확한 두 자리 돈 계산에 대해 PHP의 '정밀도' 해결 방법을 신뢰할 수 있습니까?
부동 소수점 문제에 대해 PHP PHP.INI 정밀 해결 방법을 신뢰할 수 있습니까?
소개
부동 소수점 산술에는 분수를 이진수로 나타내는 것이 포함됩니다 정확한 표현이 없을 수 있는 분수. 이로 인해 반올림 오류가 발생할 수 있습니다.
질문 1:
이 해결 방법을 사용하면 돈에 대한 정확한 두 자리 숫자 계산이 보장됩니까?
답변 1:
아니요. 계산 중에 정밀도가 높아질 수 있으므로 PHP 정밀도 설정은 정확한 2자리 계산을 보장할 수 없습니다.
질문 2:
해결 방법이 실패하는 경우의 예:
ini_set('precision', 8); $a = 5.88; // cost of 1kg $q = 2.49; // User buys 2.49 kg $b = $a * 0.01; // 10% Discount only on first kg echo ($a * $q) - $b; // result: 14.5824 (not precise for money calculations)
질문 3:
2자리 돈 계산에 가장 적합한 php.ini.precision 값은 무엇입니까?
답변 3:
PHP 정밀도는 정확한 재무 계산을 위한 권장 측정항목은 아닙니다.
간단한 테스트
bcmath, number_format 및 뺄셈 사용:
$a = 342349.23; $b = 341765.07; ini_set('precision', 20); echo $a - $b, PHP_EOL; // 584.15999999997438863 echo floatval(round($a - $b, 2)), PHP_EOL; // 584.15999999999996817 (rounding issue) echo number_format($a - $b, 2), PHP_EOL; // 584.16 echo bcsub($a, $b, 2), PHP_EOL; // 584.15 (precision set to 20) ini_set('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 (precision set to 14) ini_set('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 (precision set to 6) ini_set('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 echo bcsub($a, $b, 2), PHP_EOL; // 0.00 (precision set to 3)
결론
number_format 사용 일관성을 위해 돈 계산을 권장합니다. 센트 단위로 저장하는 것도 옵션입니다.
업데이트
질문 1: 0..999999.99 사이의 숫자에 대한 정밀도 해결 방법이 실패합니까?
답변 1:
예, 조합 수가 많기 때문에 전체 테스트는 실용적이지 않습니다.
예:
$a = 0.19; $b = 0.16; ... $h = $a + $b + ...; // Total value: 0.4 $i = $h - $a - $b - ...; // Result: 1.0408341E-17 (expected: 0.00)
질문 2: 정밀한 해결 방법이 실패하는 경우를 어떻게 추정합니까?
답변 2:
수학적 해법이 존재하지만 이는 이 토론의 범위에 포함되지 않습니다.
위 내용은 정확한 두 자리 돈 계산에 대해 PHP의 '정밀도' 해결 방법을 신뢰할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Laravel Back End : Part 2, React가있는 React 앱 구축

PHP의 컬 : REST API에서 PHP Curl Extension 사용 방법
