浮点到int错误

MKr*_*ers 2 php int casting

昨天我帮助了一个人并得到了一个奇怪的错误,我无法向他解释它是如何工作的.

代码(在3台机器上测试(PHP 5.3和PHP 5.4))

// (float)65.35
$percentage = round(65.351, 2);
// (float) 6535
$total = $percentage * 100;
// (int) 6534
$int = (int) $total;
Run Code Online (Sandbox Code Playgroud)

怀疑是int值是什么,6535但结果却是6534.

有人可以解释发生了什么吗?

Ign*_*ams 6

第一次操作后你实际上没有65.35.

>>> '%.20f' % (65.351 - 0.001,)
'65.34999999999999431566'
Run Code Online (Sandbox Code Playgroud)

要么在首位适当缩放的整数值开始,不要试图将值转换为整数,或者取整数值前加一个很小的值.