最近遇到的情况是我在一台服务器上工作,该服务器的php.ini文件包含:
precision = 16
默认为14,这似乎无害。不幸的是它导致了这个:
// ini_set('precision', 16);
echo round((20.12 / 36.79),4);
结果: 0.5469000000000001
咦? round()
不应该在这里处理浮点精度问题吗?
答案 0 :(得分:1)
php的round()
函数仍然返回浮点数,而不是字符串,所以它可能不准确。
0.5469
表示为以下8个字节0x3FE180346DC5D639
编码的双精度IEEE754。
这不是0.5469
的确切表示,而是最接近的代表性数字,实际上是5.46900000000000052757798130187E-1
参考文献: