直接用PHP执行时
var_dump((0.1+0.7)*10); #double(8)
var_dump(intval((0.1+0.7)*10)); #int(7)
主要是十进制分数如同0.1或0.7不能在不丢失一点点精度的情况下转换为内部二进制的格式
(0.1+0.7)*10)得出的结果实际是浮点型,值是7.9999...,一个无限接近于8的值
所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。如果确实需要更高的精度,应该使用任意精度数学函数或者 gmp 函数。
这个是计算机系统自身问题,不是PHP特有的特性
echo intval( (string) (0.1+0.7)*10 ); #8
网友评论