为什么设置 '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
参考文献:
最近遇到一种情况,我在一台服务器上工作,该服务器有一个 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
参考文献: