浮点型计算导致精度展示异常问题

本文介绍了编程中处理支付数据时为何应选择int类型存储,以避免浮点型造成的精度问题。作者提供了PHP的bcadd函数封装,用于精度调整,特别是针对从MySQL取出的浮点型数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:

        很多初入编程的朋友子在处理支付相关数据时喜欢使用浮点型作为金额存储数据,这样其实后续处理起来会比较麻烦,实际上最好的存储字段为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(数据一,数据二,保留位数)即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值