2012-05-11 2 views
3

누구든지 PHP에서 아래의 출력을 설명 할 수 있습니까?PHP 출력을 설명합니다

$num1 = (1.65 - 1.00); 
echo "<br><br>num1 = " . $num1; // Output: int = 0.65 

$num_int1 = $num1 * 100; 
echo "<br><br>int = " . $num_int1; // Output: int = 65 

$num_int2 = (int) $num_int1; 
echo "<br><br>int = " . $num_int2; // Output: int = 64 

왜 $ num_int2가 64입니까?

도움 주셔서 감사합니다.

하나 더하기 하나가 바로,이 같음 :

답변

15

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, multiplicationdivision을 포함하여 가장 일반적인 연산을 수행 할 수있는 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. 
+0

감사합니다. John. 나는 이것을 1 시간이 지난 후에 해결하려고했지만 그것을 할 수 없었다. 다시 한번 감사드립니다. – user427969

관련 문제