簡介
PHP 為任意精度數學計算提供了二進制電腦(Binary Calculator),它支援任意大小和精度的數字,以字元串形式描述。
需求
自 PHP 4.0.4 以來,libbcmath 都綁定在 PHP 内部。本擴充不需要其它外部庫的支援。
安裝
本類函數僅在 PHP 編譯時配置了 --enable-bcmath 時可用。在 PHP 3 中,本類函數僅在 PHP 編譯時沒有配置 --disable-bcmath 時可用。
PHP 的 Windows版本已經内置該擴充子產品的支援。無需加載任何附加擴充庫即可使用這些函數。
運作時配置
這些函數的行為受 php.ini 的影響。
表格 1. BC 數學庫配置選項
名稱 | 預設值 | 可修改範圍 | 更新記錄 |
---|---|---|---|
bcmath.scale | "0" | PHP_INI_ALL | 自 PHP 5.0.0 起可用。 |
有關 PHP_INI_* 常量進一步的細節與定義參見 附錄 G。
以下是配置選項的簡要解釋。
- bcmath.scale integer
- 所有 bcmath 函數中十進制數字的數目。參見 bcscale()。
資源類型
本擴充子產品未定義任何資源類型。
預定義常量
本擴充子產品未定義任何常量。
- 目錄 bcadd -- Add two arbitrary precision numbers bccomp -- Compare two arbitrary precision numbers bcdiv -- Divide two arbitrary precision numbers bcmod -- Get modulus of an arbitrary precision number bcmul -- Multiply two arbitrary precision number bcpow -- Raise an arbitrary precision number to another bcpowmod -- Raise an arbitrary precision number to another, reduced by a specified modulus bcscale -- Set default scale parameter for all bc math functions bcsqrt -- Get the square root of an arbitrary precision number bcsub -- Subtract one arbitrary precision number from another
bcadd()
<?php
$a = '1.234';
$b = '5';
echo bcadd($a, $b); // 6
echo bcadd($a, $b, 4); // 6.2340
?>
bccomp()
<?php
echo bccomp('1', '2') . "\n"; // -1
echo bccomp('1.00001', '1', 3); // 0
echo bccomp('1.00001', '1', 5); // 1
?>
bcdiv()
<?php
echo bcdiv('105', '6.55957', 3); // 16.007
?>
bcmod()
<?php
echo bcmod('4', '2'); // 0
echo bcmod('2', '4'); // 2
?>
bcmul()
<?php
echo bcmul('1.34747474747', '35', 3); // 47.162
echo bcmul('2', '4'); // 8
?>
bcpow()
<?php
echo bcpow('4.2', '3', 2); // 74.08
?>
bcpowmod()
<?php
$a = bcpowmod($x, $y, $mod);
$b = bcmod(bcpow($x, $y), $mod);
// $a and $b are equal to each other.
?>
bcscale()
<?php
// default scale : 3
bcscale(3);
echo bcdiv('105', '6.55957'); // 16.007
// this is the same without bcscale()
echo bcdiv('105', '6.55957', 3); // 16.007
?>
bcsqrt()
<?php
echo bcsqrt('2', 3); // 1.414
?>
bcsub()
<?php
$a = '1.234';
$b = '5';
echo bcsub($a, $b); // -3
echo bcsub($a, $b, 4); // -3.7660
?>