cgi - Problem
Jörg Wittemeier
Habe ein Online-Shopping-System (Perl) geschrieben.
Funktionierte tadellos bis ich den Server wechselte.
Jetzt klappt eine einfache Multiplikation nicht mehr.
590.00 * 1 = 590.000000000000432 !!!!!!
Wer kann mir helfen?
Gruß
Jörg
Habe ein Online-Shopping-System (Perl) geschrieben.
Funktionierte tadellos bis ich den Server wechselte.
Jetzt klappt eine einfache Multiplikation nicht mehr.
590.00 * 1 = 590.000000000000432 !!!!!!
Wer kann mir helfen?
Gruß
Jörg
Hallo Joerg,
sorry, die andere Antwort ging daneben, der Finger war zu schnell auf der Enter-Taste.
Jetzt klappt eine einfache Multiplikation nicht mehr.
590.00 * 1 = 590.000000000000432 !!!!!!
Wenn Du das Ergebnis beispielsweise in einem Skalar namens $Ergebnis speicherst, kannst Du diesen wie einen String behandeln, also etwa mit regulaeren Ausdruecken, Suchen/Ersetzen und dergleichen, um ihn zu "stutzen". Beispiel:
$Ergebnis =~ s/.*//g;
Wenn in $Ergebnis zuvor 590.000000000000432 gespeichert ist, so ist es hinterher exakt 590
Viele Gruesse
Stefan Muenz
Hallo Stefan !
Erstmal Danke für die schnelle Antwort.
Dein Lösungsvorschlag ist mir auch schon in den Sinn gekommen. Aber habe auch schon mal statt 590.0000.... ein andere variante: 589.99999999999. Man kann nun durch kaufmänischen runden (*100 und int....) wieder auf 590.- gelangen, aber wo liegt der Grund für diese fehlerhafte Berechnung. Auf meinem alten Server lief alles einwandfrei. Es schleicht sich auch die Angst ein, daß bei anderen Rechnungsoperationen etwas falsch läuft.
590.00*1 muß doch 590.00 ergeben ! :-))
Gruß
Jörg
Hallo Joerg,
sorry, die andere Antwort ging daneben, der Finger war zu schnell auf der Enter-Taste.
Jetzt klappt eine einfache Multiplikation nicht mehr.
590.00 * 1 = 590.000000000000432 !!!!!!Wenn Du das Ergebnis beispielsweise in einem Skalar namens $Ergebnis speicherst, kannst Du diesen wie einen String behandeln, also etwa mit regulaeren Ausdruecken, Suchen/Ersetzen und dergleichen, um ihn zu "stutzen". Beispiel:
$Ergebnis =~ s/.*//g;
Wenn in $Ergebnis zuvor 590.000000000000432 gespeichert ist, so ist es hinterher exakt 590Viele Gruesse
Stefan Muenz
Hallo Hoerg,
»» Man kann nun durch kaufmänischen runden (*100 und int....) wieder auf 590.- gelangen, aber wo liegt der Grund für diese fehlerhafte Berechnung. Auf meinem alten Server lief alles einwandfrei. Es schleicht sich auch die Angst ein, daß bei anderen Rechnungsoperationen etwas falsch läuft.
Kann etwas mit dem Prozessor des Servers, aber auch mit dem Betriebssystem zu tun haben. Der Perl-Interpreter tut ja auch nichts anderes, als die Perl-Befehle in betriebssystemnahe Befehle umzusetzen. Bei JavaScript beispielsweise ist es noch viel schlimmer. In dem Moment, wo intern keine Integer-Operationen durchgefuehrt werden, sondern Floatzahl-Operationen, kommen die "krummen" Ergebnisse. Warum es da nirgendwo eine Korrektur gibt und wo genau sie ansetzen muesste (Prozessor, Betriebssystem, Hochsprache), weiss ich auch nicht.
Viele Gruesse
Stefan Muenz