前言:
很多初入编程的朋友子在处理支付相关数据时喜欢使用浮点型作为金额存储数据,这样其实后续处理起来会比较麻烦,实际上最好的存储字段为int类型,以分为单位存储金额。
正因为以浮点型存储数据,所以求和的时候会出现后面多出一大串 0 的数据。因此需要使用PHP自带的 bcadd函数,这里给大家封装一下精度异常的解决算法
实现:
参数:数组 - 所需要计算的key值 (field)
# 精度求和调整
public static function precisionAdjustmentSum($array, $field = '')
{
$amount_all = 0;
foreach ($array as $k => $info) {
if ($field == '') {
$amount_all = bcadd($amount_all, $info, 2); # 精度设置,后续调整为2位
} else {
$amount_all = bcadd($amount_all, $info[$field], 2); # 精度设置,后续调整为2位
}
// $amount_all = bcadd($amount_all, $info[$field], 2); # 精度设置,后续调整为2位
}
return $amount_all;
}
以上封装只是对于项目中从MYSQL中取出的浮点型数据进行分装的参考,如果你只有纯数据,那直接bcadd(数据一,数据二,保留位数)即可