你能用sprintf解释不一致的舍入吗?

时间:2017-03-30 04:07:31

标签: php printf

我发现我觉得与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()的结果与

(我认为它可能是内部浮点表示,但所有三个似乎都存储正确。)

0 个答案:

没有答案