PHP意外导致浮动到int类型转换

前端之家收集整理的这篇文章主要介绍了PHP意外导致浮动到int类型转换前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在PHP中将float转换为int值:
var_dump((int)(39.3 * 100.0)); //Returns 3929 but should be 3930!
var_dump((int)(39.2 * 100.0)); //Returns 3920

我可以使用ceil来使它工作,但是有人可以向我解释一下吗?

var_dump((int)ceil(39.3 * 100.0)); //Returns 3930
这是因为在基数10中具有有限表示的数字可能或可能不具有PHP使用的浮点表示中的精确表示.

看到

>PHP -r "echo var_dump(sprintf('%.40F',39.3 * 100.0));"
string(45) "3929.9999999999995452526491135358810424804688"

由于int总是将数字向下舍入,因此表示中的一个小错误会使得它会向下舍入一个您想要的数字.

请考虑使用round.

猜你在找的PHP相关文章