整理php的bcmath高精度计算函数:加法、减法、乘法、除法
BCMath 任意精度数学
简介
对于任意精度的数学,PHP提供了支持用字符串表示的任意大小和精度的数字的二进制计算,最多为2147483647-1(或0x7FFFFFFF-1)
安装/配置
需求
自 PHP 4.0.4,libbcmath 随同 PHP 一起发布。该扩展不需要任何外部的库。
安装
本类函数仅在 PHP 编译时配置了 --enable-bcmath 时可用。
PHP 的 Windows 版本已内建对此扩展的支持。不需要载入额外的扩展来使用这些函数。
运行时配置
这些函数的行为受 php.ini 中的设置影响。
BC 数学 函数
bcadd — 2个任意精度数字的加法计算
说明:左操作数和右操作数求和
bcadd ( string $left_operand , string $right_operand [, int $scale ] ) : string
参数:
left_operand 左操作数,字符串类型
right_operand 右操作数,字符串类型
scale 此可选参数用于设置结果中小数点后的小数位数。也可通过使用 bcscale() 来设置全局默认的小数位数,用于所有函数。
返回值
2个操作数求和之后的结果以字符串返回
实例代码:
<?php
$qipa=250;
$xiaoqipa=2.50;
echo bcadd($qipa,$xiaoqipa);
echo "<br>";
echo bcadd($qipa,$xiaoqipa,2);
?>
结果展示:
bccomp — 比较两个任意精度的数字
说明
把right_operand和left_operand作比较, 并且返回一个整数的结果.
bccomp ( string $left_operand , string $right_operand [, int $scale = int ] ) : int
参数
left_operand 左边的运算数, 是一个字符串.
right_operand 右边的运算数, 是一个字符串.
scale 可选的scale参数被用作设置指示数字, 在使用来作比较的小数点部分.
返回值
如果两个数相等返回0, 左边的数left_operand比较右边的数right_operand大返回1, 否则返回-1.
示例代码
echo bccomp('1', '2') . "\n"; // -1
echo "<hr>";
echo bccomp('1.00001', '1', 3); // 0
echo "<hr>";
echo bccomp('1.00001', '1', 5); // 1
结果显示
bcdiv — 2个任意精度的数字除法计算
说明
左操作数除以右操作数
bcdiv ( string $left_operand , string $right_operand [, int $scale = int ] ) : string
参数
left_operand 左操作数,字符串类型
right_operand 右操作数,字符串类型
scale 此可选参数用于设置结果中小数点后的小数位数。也可通过使用 bcscale() 来设置全局默认的小数位数,用于所有函数。
返回值
返回结果为字符串类型的结果,如果右操作数是0结果为null
示例代码
echo bcdiv('1', '3', 3); // 0.333
echo "<hr>";
echo bcdiv('105', '6.55957', 3); // 16.007
echo "<hr>";
echo bcdiv('105', '6.55957', 4); // 16.0071
结果展示
bcmod — 对一个任意精度数字取模
说明
对左操作数使用系数取模
bcmod ( string $left_operand , string $modulus ) : string
参数
left_operand 字符串类型的左操作数
modulus 字符串类型系数
返回值
返回字符串类型取模后结果,如果系数为0则返回null
示例代码
echo bcmod('4', '2'); // 0
echo "<hr>";
echo bcmod('2', '4'); // 2
结果展示
bcmul — 2个任意精度数字乘法计算
说明
bcmul ( string $left_operand , string $right_operand [, int $scale = int ] ) : string
左操作数乘以右操作数
参数
left_operand字符串类型的左操作数.
right_operand 字符串类型的右操作数.
scale 此可选参数用于设置结果中小数点后的小数位数。也可通过使用 bcscale() 来设置全局默认的小数位数,用于所有函数。
返回值
返回结果为字符串类型.
示例代码
echo bcmul('1.34747474747', '35', 3); // 47.161
echo bcmul('2', '4'); // 8
echo 'qipa250原值:'.$qipa250=2.28;
echo "<hr>";
echo '直接相乘:'.$haoqipa=$qipa250*100;
echo "<hr>";
echo '相乘后转int:'.(int)$haoqipa;
echo "<hr>";
echo '使用函数:'.bcmul($qipa250, '100'); // 8
echo "<hr>";
结果展示
bcpow — 任意精度数字的乘方
说明
bcpow ( string $left_operand , string $right_operand [, int $scale ] ) : string
左操作数的右操作数次方运算.
参数
left_operand 字符串类型的左操作数.
right_operand 字符串类型的右操作数.
scale 此可选参数用于设置结果中小数点后的小数位数。也可通过使用 bcscale() 来设置全局默认的小数位数,用于所有函数。
返回值
返回结果为字符串类型.
示例代码
echo bcpow('4.2', '3', 2); // 74.08
echo "<hr>";
echo bcpow('2', '3', 2); // 8
结果展示
bcsub — 2个任意精度数字的减法
说明
bcsub ( string $left_operand , string $right_operand [, int $scale = int ] ) : string
左操作数减去右操作数.
参数
left_operand 字符串类型的左操作数.
right_operand 字符串类型的右操作数.
scale 此可选参数用于设置结果中小数点后的小数位数。也可通过使用 bcscale() 来设置全局默认的小数位数,用于所有函数。
返回值
返回减法之后结果为字符串类型
示例代码
$a = '1.234';
$b = '5';
echo bcsub($b, $a); // 3
echo "<hr>";
echo bcsub($b, $a,3); // 3.766
echo "<hr>";
echo bcsub($a, $b); // -3
echo "<hr>";
echo bcsub($a, $b, 4); // -3.7660
结果展示