我试图在 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 将 float 转换为 int 类型的意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3385685/