有人知道为什么是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有人知道为什么会这样吗?
发布于 2011-08-17 22:27:04
由于二进制浮点数的性质,内部舍入不准确将会发生。没有办法准确地将616.81表示为二进制浮点数-其最接近的值实际上略小于616.81。但是,61681可以精确地表示出来。
当616.81的表示乘以100时,结果比61681小一点,因此对它调用floor将返回61680。
http://codepad.org/H0wh2itg
如果您想要绝对精度,可以使用PHP的BC数学函数,这些函数可以以性能为代价根据您的需要进行精确计算。例如:
var_dump(floor(bcmul(616.18, 100, 12)));https://stackoverflow.com/questions/7094422
复制相似问题