php 高精确度运算 - bc函数

编辑于 2023-04-02 08:37:18 阅读 608

项目中存储金额一般用int(分),或者decimal(8,2),如果用 decimal 会涉及到精度问题。比如:比较字符串0.010哪个大,结果是一样大,因为php会把0.01强转为0,这就不符合预期了

#两个任意精度的数字除法计算
bcdiv('200', '100', 2);//分转元,200/100

#比较两个任意精度的数字
bccomp($price, $step, 2)
#两个任意精度数字的加法计算
bcadd($price, $step, 2)
#两个任意精度数字的减法
bcsub($price, $step, 2)
//将两个任意精度数字相乘
bcmul($sku->price, (string) $orderGoods['num'], 2);

例子:根据传过来的金额返回价格上下10元的金额

        $step = '10.00';
        if (bccomp($price, $step, 2) !== 1) {
            $start = '0.00';
        } else {
            $start = bcsub($price, $step, 2);
        }
        $end                      = bcadd($price, $step, 2);
        $params['price']          = [$start, $end];

参考

https://www.cnblogs.com/fangdada/p/14793664.html

https://www.php.net/manual/zh/ref.bc.php

广而告之,我的新作品《语音助手》上架Google Play了,欢迎下载体验