php中浮点转整数,为什么是向下取整,而不是四舍五入?

http://php.net/manual/zh/lang...

从浮点型转换

当从浮点数转换成整数时,将向下取整。

如果浮点数超出了整数范围(32 位平台下通常为 +/- 2.15e+9 = 2^31,64 位平台下,除了 Windows,通常为 +/- 9.22e+18 = 2^63),则结果为未定义,因为没有足够的精度给出一个确切的整数结果。在此情况下没有警告,甚至没有任何通知!

Note:
PHP 7.0.0 起,NaN 和 Infinity 在转换成 integer 时,不再是 undefined 或者依赖于平台,而是都会变成零。
Warning
绝不要将未知的分数强制转换为 integer,这样有时会导致不可预料的结果。
<?php
echo (int) ( (0.1+0.7) * 10 ); // 显示 7!
?>

白衣染霜花
浏览 493回答 2
2回答

慕少森

PHP中float转int是将小数位全部弃掉,(0.1+0.7)*10的结果内部的表示其实是类似7.9999999999999991118…,于是强行转换为int值时,结果为7。 如果实在要转,最好使用round,进行四舍五入避开浮点数精度的坑 echo (int)((0.7+0.1)*10); // 输出7 echo round((0.7+0.1)*10); // 输出8 注意:永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。如果确实需要更高的精度,应该使用任意精度数学函数或者 gmp 函数。

梵蒂冈之花

因为php是世界上最好的语言^_^
打开App,查看更多内容
随时随地看视频慕课网APP