有谁知道为什么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
有人知道为什么会这样吗?
答案 0 :(得分:7)
由于二进制浮点数的性质,将发生内部舍入不准确。无法将616.81
精确地表示为二进制浮点数 - 其最接近的近似值实际上略小于616.81
。但是,61681
可以完全表示。
当616.81
的表示乘以100
时,结果会小于61681
,因此在其上调用floor
将返回{{1} }}
如果你想要绝对精度,你可以使用PHP的BC数学函数,这些函数可以根据你的需要精确地以性能为代价。例如:
61680