Jörg Wittemeier: cgi - Problem

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

  1. 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

  2. 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

    1. 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 590

      Viele Gruesse
        Stefan Muenz

      1. 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