Hallo !!
Habe ein kleines, aber nicht unwichtiges cgi-Problem (Perl):
$test=3*529.95;
print "$test";Die Ausgabe sieht dann so aus:
1589.8500000000001364
Hallo Jörg!
Dein Problem ist prinzipieller Natur: Die Zahl
529.95, welche zunächst recht harmlos wirkt,
wird in der Binärdarstellung des Computers zu einem
periodischen, nicht-abbrechenden Dezimalbruch.
(Beispiel:
0.95 = 1-1/20,
1/20 (dezimal) = 1/10100 (binär)
= 0.0000110011001100....(binär)
)
Jetzt kommt es eben darauf an, wieviele Binärstellen der Perl-Interpreter
für eine Real-Zahl verwendet. In den letzten Stellen ist ein Rundungsfehler
immer vorprogrammiert.
Bei Zahlen, die sich glatt darstellen lassen, z.B. 0.25 = 0.01(binär),
sollten derartige Probleme dagegen nicht auftreten (ausprobieren!).
Ich habe mit Perl noch nicht viel gemacht, denke aber, daß es
irgendwelche Operatoren geben müßte, um Zahlen formatiert
- also z.B. mit genau 2 Nachkommastellen - auszugeben, wie das
im Falle einer Abrechnungs-Software sowieso sinnvoll ist.
Die Abweichungen in der 12. Dezimalstelle sind dann sozusagen
nur noch "von akademischen Interesse".
Viele Grüße,
Andreas