아래 코드를 실행해 보면 우리가 원하는 결과가 아닌 다른 값을 반환받게 됩니다.
   
<?php
$num = 9999999999999999999;

echo $num+2; // 1.0E+19
?>

위 코드 결과로 원하는 값은 10000000000000000001 이나 결과는 1.0E+19 가 나왔습니다. 

이러한 결과가 나온 이유는 PHP에서 숫자 표기의 한계를 19자리까지로 제한했기 때문입니다. 물론 PHP 버전 차이에 따라 표현할 수 있는 범위도 달라지겠지만 어찌되었든 PHP는 자동으로 결과를 부동소수점 형식인 1.0E+19로 변경시킨 결과 값을 반환하였습니다. 

위와 같은 문제를 해결하기 위해 PHP에서는 큰 숫자를 이용하여 계산할 수 있는 함수를 제공합니다. 

bcadd() 는 두 숫자를 더한 값을 반환하는 함수이고, bcsub() 는 두 숫자를 뺀 값을 반환합니다. bcmul()  는 두 값을 곱한 값을 반환하고, bcdiv() 함수는 나눈 값을 반환합니다. 마지막으로 bcsqrt() 함수는 제곱근 값을 반환합니다. 

이 함수들은 파라미터로 문자열을 사용해야 원하는 결과 값을 얻을 수 있습니다. 

bcadd() 함수는 숫자를 문자열 형식으로 표현하기 때문에 큰 숫자를 사용할 수 있고, 고정밀도를 가진 계산을 할 수 있습니다. 아래 코드를 위와 같은 일을 하지만 + 연산자 대신에 bcadd() 를 사용하여 고정밀도 숫자를 표현할 수 있습니다.
   
<?php
$num = "9999999999999999999";

echo bcadd($num, 2); // 10000000000000000001
?>


bcadd() 함수

bcadd(string num1, string num2 [, int scale]);

num1 과 num2 를 더한 결과 값을 문자열로 반환하는 함수입니다. scale 는 소수점 이하 몇 자리까지 계산할 것인지를 지정할 수 있고, 생략할 경우 소수점은 제거됩니다.
    
<?php

$a = '1.234';
$b = '5';

echo bcadd($a, $b);     // 6
echo bcadd($a, $b, 4);  // 6.2340
?>


bcsub() 함수

bcsub(string num1, string num2 [, int scale]);

num1 에서 num2 를 뺀 결과 값을 문자열로 반환하는 함수입니다. scale 파라미터는 소수점 이하 몇 자리까지 계산할 것인지를 지정할 수 있고, 생략할 경우 소수점은 제거됩니다.
    
<?php

$a = '1.234';
$b = '5';

echo bcsub($a, $b);     // -3
echo bcsub($a, $b, 4);  // -3.7660
?>


bcmul() 함수

bcmul(string num1, string num2 [, int scale]);

num1 와 num2 를 곱한 값을 문자열로 반환하는 함수입니다. scale 파라미터는 소수점 이하 몇 자리까지 계산할 것인지를 지정할 수 있고, 생략할 경우 소수점은 제거됩니다.
    
<?php

$a = '1.234';
$b = '5';

echo bcmul($a, $b);     // 6
echo bcmul($a, $b, 4);  // 6.170
?>


bcdiv() 함수

bcdiv(string num1, string num2 [, int scale]);

num1 를 num2 로 나눈 값을 문자열로 반환하는 함수입니다. scale 파라미터는 소수점 이하 몇 자리까지 계산할 것인지를 지정할 수 있고, 생략할 경우 소수점은 제거됩니다.
    
<?php

$a = '1.234';
$b = '5';

echo bcdiv($a, $b);     // 0
echo bcdiv($a, $b, 4);  // 0.2468
?>


bcmod() 함수

bcmod(string num, string modulus);

num 를 modulus 로 나눈 후 나머지 값을 문자열로 반환하는 함수입니다.
   
<?php

$a = '1.234';
$b = '5';

echo bcmod($a, $b);  // 1
?>


bcsqrt() 함수

bcsqrt(string operand [, int scale);

operand의 값의 제곱근 값을 반환하며, scale은 소수점 아래 몇 번째 자리까지 계산할 것인지를 지정합니다.
   
<?php

$a = '1.234';

echo bcsqrt($a, 10);  // 1.1108555261
echo bcsqrt($a, 20);  // 1.11085552615990527825
?>


0 댓글