PHP 精度计算引发的灾难性Bug
来源:互联网 发布:金蝶软件经销商 编辑:程序博客网 时间:2024/04/30 14:05
在维护一个比较老的金融项目时,发现精度的计算简单粗暴,先来看一下代码片段:
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.
0 0
- PHP 精度计算引发的灾难性Bug
- PHP 精度计算引发的灾难性Bug
- php精度计算
- PHP精度计算问题
- php精度计算问题
- 计算PHP精度问题
- 一个BUG引发的...
- %引发的Bug
- cocoaPods 引发的BUG
- matlab 单双精度引发的血案
- 精度丢失引发的错误--笔记
- 一个BUG引发的思考
- 一个bug引发的感想
- UISearchBar中引发的bug
- 【C++】指针引发的bug
- 一个bug引发的“血案”
- 字符串拼接引发的BUG
- Javascript 的灾难性错误。
- python小试牛刀之一
- 输入一个字符串,计算字符串中子串出现的次数
- 1003.Emergency (25)
- Spring注解整理
- 如何修改uboot的环境变量env的值来指定uImage的名字
- PHP 精度计算引发的灾难性Bug
- Xcode只能选择My Mac无法选择模拟器解决
- OpenCV实践(6)- 离散傅里叶变换
- LintCode 17-子集 JAVA
- http协议详解
- Linux系统启动那些事—基于Linux 3.10内核
- 1015: [JSOI2008]星球大战starwar
- (转)设计模式读书笔记-----简单工厂模式
- 线性表之链式表基本操作