PHP舍入问题(5.2.3)?

Dar*_*ein 7 php rounding

我想知道我是否发现了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)

Bob*_*ger 7

浮游物是邪恶的.

引用有关浮点数PHP手册文档:

因此,永远不要将浮点数结果信任到最后一位,并且永远不要将浮点数与相等性进行比较.如果需要更高的精度,可以使用任意精度数学函数gmp函数.

如果你想知道为什么以及如何使用浮点数,我建议观看:
你不想知道关于JavaScript数字的所有内容