PHP强制转换为integer返回错误的值


PHP cast to integer returns wrong value

看看这个,我的朋友,告诉我我没有疯。。。

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

我不明白为什么第一条指令会返回944!????这是已知的php问题吗?我们一如既往地感谢您的帮助!

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

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

这就是你获得944的原因。

浮点数字的精度有限。尽管这取决于系统,但PHP通常使用IEEE 754双精度格式,由于1.11e-16的四舍五入,该格式将给出最大相对误差。

此外,精确表示为以10为基数的浮点数的有理数,如0.1或0.7,不具有精确表示为在内部使用的以2为基数的浮点数,无论尾数的大小如何。因此,如果不损失很小的精度,就无法将它们转换为内部二进制对应物。

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

因此,永远不要相信浮点数的结果是最后一位,也不要直接比较浮点数以求相等。

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

如果在转换为int之前将float转换为字符串,则int将按预期生成:

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