我只是“修复”了以下 PHP 行中的一个错误:
$value = 1091.09; // the failing test case
$prop = sprintf('%013d', $value * 100);
通过添加这些行:
$cents = $value * 100; // $cents is now 109109
$cents = round($cents, 2); // $cents is still 109109
$prop = sprintf('%013d', $cents);
前一个块的结果是"0000000109108"
,而第二个块的结果是"0000000109109"
,这是正确的。
请注意,我添加了这两行以便能够分别查看调试器中的每个步骤。如果我跳过第一行,它也可以工作,因此写:
$cents = round($value * 100, 2); // $cents is now 109109
$prop = sprintf('%013d', $cents);
因此,显然,该round()
函数做了一些对值不可见的事情,使其与sprintf()
. 它是什么?
如果这是一种正确的语言,我可能会通过查看数据类型来知道。在这里,我什至不知道它们是什么。