Thread Rechenfehler mit Perl ausgleichen (71 answers)
Opened by bianca at 2013-04-27 13:42

Raubtier
 2013-04-28 23:08
#167343 #167343
User since
2012-05-04
1054 Artikel
BenutzerIn

user image
Vielleicht auch noch einmal ein anderes Beispiel:

Nehmen wir einfach mal die Zahl 1/3. Rechnen wir 3 * 1/3, dann kommt 1 heraus. Nun willst du aber nicht mit Brüchen rechnen, sondern eben als Dezimalzahl. Du kannst somit 1/3 nicht mehr darstellen, da du nur eine bestimmte Speichermenge zur Verfügung hast.

Also kommst du auf 0.3333.
Dann rechnest du 3*0.3333 und stellst fest, dass nicht 1 als Ergebnis herauskommt, sondern 0.9999.

Nichts anderes ist das bei den 0.57 auch, nur mit dem Unterschied, dass sich 57/100 eben komplett in Dezimaldarstellung schreiben lassen, in der vom Computer benutzten Darstellung aber eben nicht.

Und was die Ausgabe angeht: die gibt eben als Standard ein paar Stellen aus, die nicht unbedingt der Genauigkeit entsprechen müssen. Angenommen, es werden per Default nur 2 Stellen genommen, dann käme als print 0.9999 eben 1 heraus.

Zwei Lösungsvorschläge:
1. mit Brüchen rechnen (d.h. in deinem Fall einfach cent-Beträge statt € nehmen)
2. nie Fließkommazahlen mit == vergleichen (und 100*0.57 ist eine Fließkommazahl) (es sei denn, man möchte Annahmen über den verwendeten Datentyp benutzen)

Wurde aber beides schon vorgeschlagen. Daher bin ich auch ratlos, wie man weiter helfen könnte.

View full thread Rechenfehler mit Perl ausgleichen