为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
白衣染霜花 2019-03-18 16:55:43
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,这样有时会导致不可预料的结果。<?phpecho (int) ( (0.1+0.7) * 10 ); // 显示 7!?>
查看完整描述

2 回答

?
慕少森

TA贡献2019条经验 获得超9个赞

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 函数。

查看完整回答
反对 回复 2019-03-18
?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

因为php是世界上最好的语言^_^

查看完整回答
反对 回复 2019-03-18
  • 2 回答
  • 0 关注
  • 492 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信