an article I wrote for Authorize.Net에서 (특정 경우 $num_int1
에는 정수처럼 보이는 경우에도 부동이다)? 약 .2 더하기 1.4 배 10? 그게 16인데 맞지?
echo floor((0.2 + 1.4) * 10); // Should be 16. But it's 15!
이 내부적으로 처리하는 방법을 부동 소수점 숫자로 인해 : 당신은 PHP (또는 대부분의 다른 프로그래밍 언어)와 함께 수학을하고 싶으세요합니다. 그들은 고정 소수 자릿수로 표현되며, 예상대로 합쳐지지 않는 숫자가 될 수 있습니다. 내부적으로 우리의 .2 plus 1.4 times 10 예제는 대략 15.9999999998 정도입니다. 이런 종류의 수학은 백분율과 같이 정확할 필요가없는 숫자로 작업 할 때 좋습니다. 그러나 돈으로 정밀 작업을 할 때 페니 나 여기에 누락 된 달러가 빨리 추가되고 누락 된 돈의 짧은 끝에 아무도 좋아하지 않습니다.
BC 주 수학 솔루션
다행히 PHP는 인 BC Math extension 제공 "임의 정밀도 수학에 대한 PHP 문자열로 표현 크기와 정밀도의 숫자를 지원하는 이진 계산기를 제공합니다." 즉,이 확장을 사용하여 금전적 가치가있는 정확한 수학을 할 수 있습니다. addition, subtraction, multiplication 및 division을 포함하여 가장 일반적인 연산을 수행 할 수있는 BC Math extension contains function입니다.
더 나은 예
다음은 위와 같지만 우리를 위해 수학을 수행 할 bcadd() 함수를 사용하는 것과 같은 예입니다. 세 가지 매개 변수가 필요합니다. 첫 번째 두 개는 추가하려는 값이고 세 번째는 정확하게하려는 소수 자리의 수입니다. 우리가 돈으로 작업하고 있기 때문에 정밀도를 십진수로 두 자릿수로 설정합니다.
echo floor(bcadd('0.2', '1.4', 2) * 10); // It's 16 like we would expect it to be.
감사합니다. John. 나는 이것을 1 시간이 지난 후에 해결하려고했지만 그것을 할 수 없었다. 다시 한번 감사드립니다. – user427969