PHP在将双精度数转换为整数时无法产生正确的输出

时间:2018-10-13 18:28:21

标签: php casting

我遇到了将双精度变量转换为整数的情况。这给了我错误的结果。为什么会这样呢?

>>> $amount = (double) 1052.10
=> 1052.1
>>> $amount = $amount * 100;
=> 105210.0
>>> (int) $amount;
=> 105209 // weird 

我可以通过先对变量进行四舍五入来解决它(即:(int) round($amount)),

但是,我仍然想知道为什么会这样吗?

使用 PHP 7.2.9

1 个答案:

答案 0 :(得分:0)

“警告”部分here指出:

  

此外,在底数10中可精确表示为浮点数的有理数(如0.1或0.7)在底数2中不具有作为浮点数的精确表示,内部使用,无论尾数的大小如何。因此,不能在不损失精度的情况下将它们转换为内部二进制副本。