Einfache Rechnung -> Falsches Ergebnis
Hallo allerseits,
ich habe eine Frage. Ich habe gestern mal eben einen kleinen Netto-Brutto, Brutto-Netto-Rechner gebaut. Dazu habe ich folgenden Code:
if ($rechne AND !empty($netto) AND empty($brutto)) {
$ergn = $netto*1.19;
$erg = (double)sprintf ('%.2f',$ergn);
echo "$netto Euro Netto sind $erg Euro Brutto!";
}
if ($rechne AND empty($netto) AND !empty($brutto)) {
$ergen = $brutto/1.19;
$erge = (double)sprintf ('%.2f',$ergen);
echo "$brutto Euro Brutto sind $erge Euro Netto!";
}
So, hab ich gleich ausprobiert, funzt auch prima. Wenn ich bei Netto 100 eingebe, gibt er mir 119 Brutto als Antwort. Stimmt also. Nun wollte ich eine etwas schwerere Rechnung ausprobieren und habe dazu bei Netto 248,74 Euro eingegeben. Daraufhin sagt er, dass das 295.12 Euro sind. Das ist aber falsch, ich habe mit dem Taschenrechner nachgerechnet und habe 296,0006 Euro herausbekommen.
Daraufhin dachte ich, dass es möglicherweise an dem Runden liegt und habe die Spalte (double)sprintf ('%.2f',$ergn) gelöscht. Doch es kommt immernoch genau das gleiche falsche Ergebnis heraus.
Woran liegt das? Warum rechnet PHP falsch?
Gruß,
Üsch
Antwort schreiben
Antwort 1 von Flintstone vom 09.05.2019, 18:27 Options
Hallo,
hättest du das 'falsche' Ergebnis mal zurückgerechnet, dann wäre dir aufgefallen, dass die Dezimalstellen des Ausgangwertes ignoriert werden.
295,12 / 1,19 = 248,00
Gruß
Fred
Antwort 2 von Uesch vom 10.05.2019, 16:10 Options
Und woran liegt das, dass er die nicht mitrechnet?
Antwort 3 von JBJBJBJBJBJBJBJ vom 10.05.2019, 16:20 Options
Hallo,
woran das liegt kann ich dir leider auch nicht sagen.
Ich hätte nur eine Mögliche Lösung für dich.
Bei einer Eingabe von einer Kommazahl multiplizierst du einfach mal 100. Bei der Rückgabe dividierst du dann wieder durch 100.
Gruß
Antwort 4 von TombDevil vom 10.05.2019, 17:17 Options
Hallo Üsch,
das liegt am Komma bei 248,74 - hier muss ein Dezimalpunkt stehen genau wie bei Deinen 1.19. Ansonsten schneidet PHP einfach beim Rechnen die "Nachkommazahlen" ab.
siehe Beispiel:
$na = array(100, '248,74', 248.74);
foreach($na as $netto)
{
$ergn = $netto*1.19;
echo($netto.'*1.19='.$ergn.'<BR>');
}
liefert
100*1.19=119
248,74*1.19=295.12
248.74*1.19=296.0006
Ausser Du hast Dein setlocale verändert auf "german", aber dann stimmt der Dezimalpunkt nicht.
Ciao
TombDevil