php 高精确度运算 - bc函数

2023-04-03 09:38:47 浏览数 (1)

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

代码语言:javascript复制
#两个任意精度的数字除法计算
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元的金额

代码语言:javascript复制
        $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];

0 人点赞