我遇到了将双精度变量转换为整数的情况。这给了我错误的结果。为什么会这样呢?
>>> $amount = (double) 1052.10
=> 1052.1
>>> $amount = $amount * 100;
=> 105210.0
>>> (int) $amount;
=> 105209 // weird
我可以通过先对变量进行四舍五入来解决它(即:(int) round($amount)
),
但是,我仍然想知道为什么会这样吗?
使用 PHP 7.2.9
答案 0 :(得分:0)
“警告”部分here指出:
此外,在底数10中可精确表示为浮点数的有理数(如0.1或0.7)在底数2中不具有作为浮点数的精确表示,内部使用,无论尾数的大小如何。因此,不能在不损失精度的情况下将它们转换为内部二进制副本。