PHP楼层功能

时间:2011-08-17 14:22:09

标签: php floating-point

有谁知道为什么floor(61681) = 61681,但是floor(616.81*100) = 61680

我尝试了许多其他值,例如

floor(716.81*100) = 71681
floor(816.81*100) = 81681
floor(916.81*100) = 91681
floor(616.83*100) = 61683

有人知道为什么会这样吗?

1 个答案:

答案 0 :(得分:7)

由于二进制浮点数的性质,将发生内部舍入不准确。无法将616.81精确地表示为二进制浮点数 - 其最接近的近似值实际上略小于616.81。但是,61681可以完全表示。

616.81的表示乘以100时,结果会小于61681,因此在其上调用floor将返回{{1} }}

http://codepad.org/H0wh2itg

如果你想要绝对精度,你可以使用PHP的BC数学函数,这些函数可以根据你的需要精确地以性能为代价。例如:

61680