php的bc数学函数高精度计算
- bcadd — 2个任意精度数字的加法计算
- bcsub — 2个任意精度数字的减法
- bcmul — 2个任意精度数字乘法计算
- bcdiv — 2个任意精度的数字除法计算
- bcmod — 对一个任意精度数字取模
- bcpow — 任意精度数字的乘方
- bccomp — 比较两个任意精度的数字
- bcpowmod — 将一个任意的精度数提高到另一个精度,并按指定的模数减少
- bcscale — 设置所有bc数学函数的默认小数点保留位数
- bcsqrt — 任意精度数字的二次方根
php的bc数学函数高精度计算示例如下:
bcadd() 加法
0 1 2 3 4 5 6 7 8 |
<?php echo bcadd("1", "2"); // 3 echo bcadd("1", "2 "); // 1 echo bcadd("1", " 2"); // 1 $a = '1.234'; $b = '5'; echo bcadd($a, $b); // 6 echo bcadd($a, $b, 4); // 6.2340 |
bcsub() 减法
0 1 2 3 4 5 6 7 8 9 |
<?php $a = '1.234'; $b = '5'; echo bcsub($a, $b); // -3 echo bcsub($a, $b, 4); // -3.7660 echo bcsub('7', '5'); // 7 - 5 = '2' echo bcsub('12', '17'); // 12 - 17 = '-5' |
bcmul() 乘法
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php echo bcmul('1.34747474747', '35', 3); // 47.161 echo bcmul('2', '4'); // 8 $float = 0.31234144143341; $float1 = 0.00000000000000000000000000000005; echo $float, "\n"; //0.31234144143341 echo $float1, "\n"; //5.0E-32 echo $float*$float1, "\n"; //1.5617072071671E-32 /* bcmul将浮点数读取为字符串 */ echo bcmul($float, $float1, 32),"\n"; //0 echo bcmul($float, sprint('%.32f',$float1), 32); //0.000000000000000000000000000000015617072071671; |
bcdiv() 除法
0 1 2 3 4 5 |
<?php echo bcdiv('105', '6.55957', 3); // 16.007 $result= bcdiv(89.99999999997,2.57865741235478,2); echo "$result"; // 34.90 |
bcmod() 对一个任意精度数字取模
0 1 2 3 |
<?php echo bcmod('4', '2'); // 0 echo bcmod('2', '4'); // 2 echo bcmod('10', '2.1'); // 0 |
bcpow() 任意精度数字的乘方
返回字符串类型取模后结果,如果系数为0则返回null
0 1 2 3 4 |
<?php echo bcpow('4.2', '3', 2); // 74.08 echo bcpow('5', '2', 2); // prints "25", not "25.00" |
bccomp() 比较两个任意精度的数字
如果两个数相等返回0, 左边的数left_operand比较右边的数right_operand大返回1, 否则返回-1.
0 1 2 3 4 |
<?php echo bccomp('1', '2') . "\n"; // -1 echo bccomp('1.00001', '1', 3); // 0 echo bccomp('1.00001', '1', 5); // 1 |
bcpowmod() 将一个任意的精度数提高到另一个精度,并按指定的模数减少
返回字符串形式的结果,如果模数是O或指数是负数,则返回FALSE。
0 1 2 3 4 5 |
<?php $a = bcpowmod($x, $y, $mod); $b = bcmod(bcpow($x, $y), $mod); // $a 和 $b 是相等的 |
bcscale() 设置所有bc数学函数的默认小数点保留位数
成功时返回 TRUE, 或者在失败时返回 FALSE。
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php // 默认保留小数点后位数: 3 bcscale(3); echo bcdiv('105', '6.55957'); // 16.007 // 和 bcscale() 是一样的 echo bcdiv('105', '6.55957', 3); // 16.007 // -------------------- bcscale(15); $a=123.456; $b=0.123; $_ab=bcadd($a,$b); echo $_ab; // 123.579000000000000 $ab = (float)$_ab; echo $ab; // 123.579 |
bcsqrt() 任意精度数字的二次方根
返回二次方根的结果为字符串类型,如果操作数是负数则返回null.
0 1 2 |
<?php echo bcsqrt('2', 3); // 1.414 |
php的bc数学函数高精度计算