项目中存储金额一般用int
(分),或者decimal(8,2)
,如果用 decimal 会涉及到精度问题。比如:比较字符串0.01
和0
哪个大,结果是一样大,因为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元的金额
代码语言: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];