我想知道我是否发现了PHP中的舍入问题,特别是5.2.3(我目前还不确定其他版本):
$t = 0;
$taxAmount = (5.000 / 100) * 0.7;
$t += $taxAmount;
var_dump($t); // float(0.035)
var_dump(round($t, 2)); // float(0.03)
var_dump(number_format($t, 2)); // string(4) "0.03"
Run Code Online (Sandbox Code Playgroud)
对我来说0.035应该会变成0.04还是我只是疯了?
编辑
Thxs到NebyGemini的答案,我想我会做到这一点,而不是:
$t = 0;
$taxAmount = bcmul(bcdiv(5.000, 100, 3), 0.7, 3);
$t += $taxAmount;
var_dump($t); // float(0.035)
var_dump(round($t, 2)); // float(0.04)
var_dump(number_format($t, 2)); // string(4) "0.04"
Run Code Online (Sandbox Code Playgroud)
哪个效果很好.
顺便说一句,我正在计算购物车中的税.订单总额为0.70(70美分),税率为5%.
编辑
感谢Ignacio Vazquez-Abrams的回答,这是为了说明问题所在:
printf('%.18F', 5.000 / 100 * 0.7);
Run Code Online (Sandbox Code Playgroud)