“round”如何返回浮点数?

PHP 浮点类型是 IEEE-754 binary64。

数字 59.95 不能以二进制精确存储。在 IEEE-754 binary64 中, 的表示59.95应该是59.9500000000000028421709430404007434844970703125

但是,当我这样做时

<?php 

return 59.95

它返回 59.95。这怎么可能?

函数round 还声称将 val 的舍入值返回到指定精度作为浮点数。但这怎么可能呢?不存在59.95点后只有两位数的浮点表示。

回答

PHP 通过precisionini 设置控制浮点到字符串的精度。此值为14默认值。

如果您改为使用32或 其他任意更大的值,您将看到您要查找的内容:

> php -d "precision=32" -r "print(59.95);"
59.950000000000002842170943040401
                ^-- Default precision stops here

由于与“精确”值的差异发生在默认精度值之后,因此该值将按照您的预期打印:

> php -d "precision=14" -r "print(59.95);"
59.95


以上是“round”如何返回浮点数?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>