1

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

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

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

4

3 回答 3

2

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

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

这就是你得到 944 的原因。

于 2013-08-07T15:03:30.577 回答
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

于 2013-08-07T15:02:52.100 回答
0

如果在转换为 int 之前将 float 转换为 string,则 int 将按预期结果:

echo (int)(9.45 * 100); // 944
echo (int)(string)(9.45 * 100); // 945
于 2021-09-23T06:11:39.473 回答