Andreas Bierhals: cgi kann nicht rechnen

Beitrag lesen

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