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