我试图将浮点数转换为php中的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“回显var_dump(sprintf('%。40F',39.3 * 100.0));” 字符串(45)“ 3929.9999999999995452526491135358810424804688”
由于int总是将数字四舍五入,因此制图表达中的一个小错误使它可以将其四舍五入为一个原本希望的数字。
int
考虑round改为使用。
round