我发现我觉得与PHP的sprintf()
功能不一致。以下代码:
$n = 691.625;
$s = sprintf("%.2f", $n);
$r = round($n, 2);
print "$n: $s $r\n";
$n = 17.565;
$s = sprintf("%.2f", $n);
$r = round($n, 2);
print "$n: $s $r\n";
$n = 19.875;
$s = sprintf("%.2f", $n);
$r = round($n, 2);
print "$n: $s $r\n";
产生以下输出:
691.625: 691.62 691.63
17.565: 17.57 17.57
19.875: 19.88 19.88
我期待以下内容:
691.625: 691.63 691.63
17.565: 17.57 17.57
19.875: 19.88 19.88
区别在于第一行的第二个数字。所以我的问题是,为什么sprintf()
向下舍入第一个数字,向上为第二个和第三个?
我已经在PHP 5.4,5.5和7.0下复制了这个。我已经将round()
的结果与1}进行了比较。
(我认为它可能是内部浮点表示,但所有三个似乎都存储正确。)