Thread Rechenfehler mit Perl ausgleichen
(71 answers)
Opened by bianca at 2013-04-27 13:42
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. |