PHP转换为整数返回错误的值

时间:2013-08-07 14:56:51

标签: php casting integer

看看我的朋友并告诉我,我并不疯狂......

echo (int) (9.45 * 100); // gives 944
echo (int) 945; // gives 945

我不明白为什么第一条指令会返回944!????这是一个已知的PHP问题吗?帮助一如既往地受到赞赏!

2 个答案:

答案 0 :(得分:1)

根据PHP文档(http://php.net/manual/en/language.types.integer.php

When converting from float to integer, the number will be rounded towards zero. 

这就是你获得944的原因。

答案 1 :(得分:0)

浮点数的精度有限。虽然它取决于系统,但PHP通常使用IEEE 754双精度格式,由于舍入的顺序为1.11e-16,因此会产生最大的相对误差。

此外,基本10中的浮点数精确表示的有理数,如0.1或0.7,没有精确表示为基数2中的浮点数,无论尾数的大小如何,它都在内部使用。因此,它们不能在没有很小精度损失的情况下转换为它们的内部二进制对应物。

这可能导致令人困惑的结果:例如,floor((0.1+0.7)*10)通常会返回7而不是预期的8,因为内部表示将类似于7.9999999999999991118 ....

所以永远不要将浮点数结果信任到最后一位数,并且不要直接比较浮点数是否相等。

有关详细信息,请访问http://php.net/manual/en/language.types.float.php