Im folgenden Code, warum der Multiplikationsansatz keine Rundungsfehler erzeugt, während der kumulative Additionsansatz ist?Warum bekomme ich ein anderes Ergebnis von zwei vermeintlich analogen Rechenoperationen?
function get_value() { return 26.82; }
function a($quantity) {
$value_excluding_vat = get_value();
$value_including_vat = round($value_excluding_vat * (1 + (20/100)),2);
$total_nett = 0;
$total_gross = 0;
for($i=0; $i<$quantity; $i++) {
$total_nett += $value_excluding_vat;
$total_gross += $value_including_vat;
}
return array(
$total_nett,
$total_gross
);
}
function b($quantity) {
$value_excluding_vat = get_value();
$value_including_vat = round($value_excluding_vat * (1 + (20/100)),2);
return array(
$quantity * $value_excluding_vat,
$quantity * $value_including_vat
);
}
$totals = a(1000);
print_r($totals);
echo $totals[1] - $totals[0];
echo "\n\n";
$totals = b(1000);
print_r($totals);
echo $totals[1] - $totals[0];
Hier ist meine Ausgabe:
Array
(
[0] => 26820
[1] => 32180
)
5360.0000000005
Array
(
[0] => 26820
[1] => 32180
)
5360
Mögliche Duplikat http: // Stackoverflow. com/questions/11366522/php-Gleitkomma-Fehler-mit-Grund-Mathematik – BLaZuRE
Ich las Ihre Frage als: _ "Ich hatte Code A (nicht gezeigt), die Ergebnis X zurückgegeben, wenn Sie Gleitkommazahlen multiplizieren und runden. Ich habe das in Code B geändert (nicht gezeigt), was Ergebnis Y ergibt. Warum passiert das? "_. Die Antwort ist: es hängt von Ihrem Code ab und hat wahrscheinlich mit Rundungsfehlern zu tun. Bitte zeigen Sie Ihren tatsächlichen, relevanten Code und Was Sie versucht haben – CodeCaster
Betrachten Sie die Verwendung des Arguments $ mode zu [round()] (http://php.net/manual/en/function.round.php): Der Standard ist PHP_ROUND_HALF_UP –