PHP 高精度运算
2016-06-24 16:33:43 小德 PHP 访问次数 1157


PHP float 型数据计算精度问题

php计算float型数据时常常遇到精度问题,这是因为计算机底层二进制无法精确表示浮点数的一个bug,这是跨语言的,解决办法:PHP的BC高精度计算函数库。

EXc:
    $a = 100 * 0.58;
    var_dump(intval($a));
打印值为57.

两个浮点数相加:

var_dump(1.0321456+0.0243356);
var_dump(bcadd($left=1.0321456, $right=0.0243456, 8));

输出结果:
float 1.0564812

string '1.05649120' (length=10)

两个浮点数相减:

var_dump(bcsub($left=1.0321456, $right=3.0123456, 8));
输出结果:
string '-1.98020000' (length=11)
两个浮点数相乘:
var_dump(bcmul($left=3.1415926, $right=2.4569874566, 8));
输出结果:
string '7.71885361' (length=10)
两个浮点数相出:
var_dump(bcdiv($left=6, $right=5, 4));
输出结果:
string '1.2000' (length=6)

设置bc函数小数点位数:超出位数是丢弃的,不是四舍五入
bcscale(3);
var_dump(bcmul($left=3.1415926, $right=2.4569874566));
var_dump(bcdiv($left=6, $right=5));

输出结果:
string '7.718' (length=5)

string '1.200' (length=5)

bcpow — 求高精度数字乘方

bcpowmod — 求高精度数字乘方求模,数论里非常常用

bcscale — 配置默认小数点位数,相当于就是Linux bc中的”scale=”

bcsqrt — 求高精度数字平方根