PHP浮点型计算失去精度
将 (0.7+0.1)*10的结果转换为整形的时候,intval((0.7+0.1)*10)期望结果是int (8),
而实际结果是7,这是因为php的浮点型计算遵寻IEEE 754双精度。
PHP提供了以下浮点型计算库
bcadd—将两个高精度数字相加 bcsub—将两个高精度数字相减 bcmul—将两个高精度数字相乘 bcdiv—将两个高精度数字相除 bccomp—比较两个高精度数字,返回-1, 0, 1 bcmod—求高精度数字余数 bcpow—求高精度数字乘方 bcpowmod—求高精度数字乘方求模,数论里非常常用 bcscale—配置默认小数点位数,相当于就是Linux bc中的”scale=” bcsqrt—求高精度数字平方根
将以上转换为 inval(bcadd(0.7,0.1)*10) 计算结果为 8
总结:
php不能将两个浮点型的小数进行相加,需要使用精度计算库中的函数进行计算,也不能比较两个浮点型数的大小。
以上函数都有第3个参数,代表保留多少位小数点。
————————————————
版权声明:本文为CSDN博主「腾飞的鱼」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/everdayPHP/article/details/122584848
若文章对您有帮助,帮忙点个赞!
(微信扫码即可登录,无需注册)