简介
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
?>