为什么设置 'precision' 会中断 php round()?

Why does setting 'precision' break php round()?

最近遇到一种情况,我在一台服务器上工作,该服务器有一个 php.ini 文件:

precision = 16

默认为14,这似乎没什么害处。不幸的是,它导致了这个:

// ini_set('precision', 16);
echo round((20.12 / 36.79),4);

结果: 0.5469000000000001

嗯? round() 不应该处理这里的浮点精度问题吗?

php 的 round() 函数仍然是 returns 浮点数,而不是字符串,因此它可能不准确。

0.5469表示为以下8字节0x3FE180346DC5D639编码的双精度IEEE754.

这不是 0.5469 的精确表示,而是最接近的可表示数字,实际上是 5.46900000000000052757798130187E-1

参考文献: