PHP Rundungsproblem (5.2.3)?
Ich frage mich, ob ich ein Problem mit der Rundung in PHP gefunden habe, insbesondere 5.2.3 (bei anderen Versionen bin ich mir derzeit nicht sicher):
$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"
Für mich sollte 0.035 auf 0.04 runden oder bin ich nur verrückt?
Bearbeiten
Danke anNebyGeminis AntwortIch dachte, ich würde dies stattdessen tun:
$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"
Welches funktioniert perfekt.
Übrigens berechne ich eine Steuer in einem Einkaufswagen. Die Gesamtsumme der Bestellung beträgt 0,70 (70 Cent) und die Steuer beträgt 5%.
Bearbeiten
Danke anDie Antwort von Ignacio Vazquez-Abrams, um zu zeigen, wo das Problem liegt:
printf('%.18F', 5.000 / 100 * 0.7);