PHP 精度计算引发的灾难性Bug

  在维护一个比较老的金融项目时,发现精度的计算简单粗暴,先来看一下代码片段:

if($accountInfo['account_money'] < $repayMoney ){
                rollback();
                return false;
}

  如上代码片段变量所示,上面的代码主要是比较帐户余额及还款数,两者均为双精度浮点数,稍作修改代码,让我们能看到一些输出才更直观

 if($accountInfo['account_money'] < $repayMoney ){
                echo "{$accountInfo['account_money']}\n\r";
                echo "{$repayMoney}\n\r";
                rollback();
                return false;
}

运行如上代码得到如下图结果

两个数均为1333.35,如果按上面的逻辑来说,不应该进入到 if 体内,但结果却恰恰相反,进行 if 体内并echo 出了两值,通过查阅相关api 发现,PHP 的精度运算,会在直接+,-,*,/,<,>等运算时丢失精度,因此结果并非如你所愿,在这里提现大家,在PHP中对精度运算,应调用相关API,如BC Math.

转载于:https://www.cnblogs.com/qinhir/p/6358301.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值