PHP浮点数要注意的问题
网络整理 - 08-26
这段程序,我以为输入4个都是845。不过结果出乎意料。php 5.29输入的结果是
float(845)
int(844)
float(845)
int(845)
为什么两个都是845的浮点数,转整时一个事845一个是844?php手册上的说法是:
显然简单的十进制分数如同 0.1 或 0.7 不能在不丢失一点点精度的情况下转换为内部二进制的格式。这就会造成混乱的结果:例如,floor((0.1+0.7)*10) 通常会返回 7 而不是预期中的 8,因为该结果内部的表示其实是类似 7.9999999999...。
不过仍然很费解
两个都是 float(7)。
所以遇到php浮点数,特别是要对两数相比较是要注意这个问题。