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


若文章对您有帮助,帮忙点个赞!

0
-5
发布时间 2022-09-05 18:47:17
0 条回复(回复会通过微信通知作者)
点击加载更多评论
登录 后再进行评论
(微信扫码即可登录,无需注册)