sprintf()和round()结果之间的PHP区别

时间:2018-04-18 11:57:15

标签: php printf rounding

ini_set('precision', 32);

var_dump(0.855);
//float(0.84999999999999997779553950749687)

var_dump(round(0.855, 2, PHP_ROUND_HALF_EVEN));
//float(0.85999999999999998667732370449812)

var_dump((float)sprintf('%.2f', 0.855));
//float(0.84999999999999997779553950749687)

为什么sprinf()和round()的结果有区别?

据我所知,0.855不能表示为IEEE754中的确切数字,这不是关于为什么会出现这种情况的问题。

This answer表示C like函数应用“round to nearest and ties to even”,这是我期望PHP_ROUND_HALF_EVEN标志应该复制的。

修改: 我不想打[复制]关闭,所以如果有人在将来发现并感兴趣,链接问题中最接近的答案是https://stackoverflow.com/a/27108849/820841,其中round()被写为“做正确的事” 。我想现在必须满足我的好奇心。

0 个答案:

没有答案