pyy*_*yyp 2 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
Run Code Online (Sandbox Code Playgroud)
谁知道为什么会这样?
由于二进制浮点数的性质,将发生内部舍入不准确.没有办法616.81准确地表示为二进制浮点数 - 其最接近的近似值实际上略小于616.81.61681但是,可以准确地表示.
当表示式616.81乘以时100,结果会小一点61681,因此调用floor它将返回61680.
如果您需要绝对精度,可以使用PHP的BC数学函数,这些函数可以根据您的需要精确地以性能为代价.例如:
var_dump(floor(bcmul(616.18, 100, 12)));
Run Code Online (Sandbox Code Playgroud)