Uli: Rechnen mit Zahlen wie ( 10.000,50 € ) in JavaScript

Hallo,

ich baue grade ein Berechnungsblatt für unsere Firma, aber in JavaScript ist das ja nicht so leicht, wegen der Punkt und Komma Geschichte!

Ich weiß schon wie man in JavaScript etwas zusammen rechnet, aber ich muss die normale Schreibweise nutzen, da die Firma es so verlangt.

Also z.B. 16.000,50 € ist richtig und 16000.50 einzutippen ist bescheuert!! Die Komma in Punkt umwandlung bringt mir auch nichts!
Hat jemand eine Idee?

THX

  1. hi,

    Ich weiß schon wie man in JavaScript etwas zusammen rechnet, aber ich muss die normale Schreibweise nutzen, da die Firma es so verlangt.

    Diese "normale Schreibweise" ist aber in Javascript keine Zahl - also kannst du mit ihr auch nicht "rechnen".

    Also z.B. 16.000,50 € ist richtig und 16000.50 einzutippen ist bescheuert!! Die Komma in Punkt umwandlung bringt mir auch nichts!

    Doch, sollte sie.
    Punkt und Komma vertauschen, überflüssiges wie das EURO-Zeichen entfernen - und dann in eine Zahl umwandeln (parseFloat() bietet sich an).

    Hat jemand eine Idee?

    Wenn es "nicht klappt", dann zeig uns, was du bisher versucht hast.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. und dann in eine Zahl umwandeln (parseFloat() bietet sich an).

      Lieber nicht!
      ... mit Fließkommazahlen rechnen. 0.01 lässt sich binär nicht exakt darstellen, es sei denn, JavaScript arbeitet völlig anders als üblich. Es besteht dann die Gefahr, dass es bei Additionen zu Fehlern kommt. Schön in Cent rechnen und nur für die Ausgabe, das Komma bzw. den Punkt an der richtigen Stelle platzieren. Beim Einlesen geht's umgekehrt. Es ist wirklich nicht schwierig, den String "10.000,50" in die Ganzzahl 1000050 umzuwandeln und umgekehrt die Ganzzahl wieder in den gewünschten String zu konvertieren, der sicher immer genau zwei Nachkommastellen haben soll.

      Claus

      1. Hallo Claus,

        0.01 lässt sich binär nicht exakt darstellen, es sei denn, JavaScript arbeitet völlig anders als üblich. Es besteht dann die Gefahr, dass es bei Additionen zu Fehlern kommt.

        genau das passiert in Javascript auch recht schnell; hier wird auch die ganz "normale" Fließkommaarithmetik mit all ihren Unzulänglichkeiten und Problemen eingesetzt - unter anderem die Rundungsfehler, die du andeutest.

        Schön in Cent rechnen und nur für die Ausgabe, das Komma bzw. den Punkt an der richtigen Stelle platzieren.

        An sich richtig für die interne Darstellung und Rechnung, aber ...

        Beim Einlesen geht's umgekehrt. Es ist wirklich nicht schwierig, den String "10.000,50" in die Ganzzahl 1000050 umzuwandeln und umgekehrt die Ganzzahl wieder in den gewünschten String zu konvertieren, der sicher immer genau zwei Nachkommastellen haben soll.

        ... das Problem ist die Interpretation der Benutzereingaben. Was machst du dann mit der Eingabe "16,000"? Meint der Anwender damit tatsächlich 16EUR, oder eigentlich 16000EUR?
        Worauf ich hinaus will: Man sollte sich auf *eine* Sache festlegen. Wenn man den Quatsch mit den Tausender-Trennzeichen konsequent weglässt, lässt sich die Eingabe plötzlich recht eindeutig interpretieren. Punkt oder Komma können dann dieselbe Funktion als Dezimaltrennzeichen haben, und es bleibt dem Benutzer überlassen, welches der beiden Zeichen er nutzen möchte.
        Will man Tausender- *und* Dezimaltrennzeichen in der Eingabe zulassen, wird es immer Fälle geben, in denen eine Eingabe formal richtig, aber nicht eindeutig ist.
        Ich ärgere mich dagegen immer wieder über Fälle (ebay, Onlinebanking), in denen keine Tausender-Trennzeichen benutzt werden, das System aber trotz Eindeutigkeit hartnäckig auf Eingaben mit Komma als Dezimaltrennzeichen besteht.

        Schönen Tag noch,
         Martin

        --
        Der Alptraum jedes Computers:
        "Mir war, als hätte ich gerade eine 2 gesehen."
        1. Hallo.

          ... das Problem ist die Interpretation der Benutzereingaben. Was machst du dann mit der Eingabe "16,000"? Meint der Anwender damit tatsächlich 16EUR, oder eigentlich 16000EUR?
          Worauf ich hinaus will: Man sollte sich auf *eine* Sache festlegen. Wenn man den Quatsch mit den Tausender-Trennzeichen konsequent weglässt, lässt sich die Eingabe plötzlich recht eindeutig interpretieren.

          Es besteht ja auch kaum eine Veranlassung, die Punkte mit einzugeben, da die entsprechende Taste ja sogar abseits des Nummernblocks angeordnet ist. Daher empfiehlt es sich, einzeln stehende Kommata als Dezimaltrennzeichen zu interpretieren, mehrfache Kommata abzufangen und zu hinterfragen sowie Punkte möglichst gar nicht erst zur Eingabe zuzulassen und erst bei der Ausgabe korrekt zu setzen.
          MfG, at

          1. n'Abend,

            Es besteht ja auch kaum eine Veranlassung, die Punkte mit einzugeben, da die entsprechende Taste ja sogar abseits des Nummernblocks angeordnet ist.

            da frage ich mich erstens, was der "Nummernblock" damit überhaupt zu tun hat - erstens haben ihn einige meiner Tastaturen gar nicht, und selbst bei denen, die ihn haben, fristet er bei mir ein Schattendasein, weil ich zur Eingabe von Zahlen die obere Reihe des alphanumerischen Tastenfeldes praktischer finde.
            Zweitens produziert die mittlere Taste in der unteren Reihe des numerischen Tastenblock ("DEL") selbstverständlich einen Dezimal_punkt_, wenn NumLock versehentlich mal eingeschaltet sein sollte.

            Daher empfiehlt es sich, einzeln stehende Kommata als Dezimaltrennzeichen zu interpretieren, mehrfache Kommata abzufangen und zu hinterfragen sowie Punkte möglichst gar nicht erst zur Eingabe zuzulassen und erst bei der Ausgabe korrekt zu setzen.

            Ich würd's genau andersrum machen ...

            So long,
             Martin

            --
            Die letzten Worte der Challenger-Crew:
            Lasst doch mal die Frau ans Steuer!
            1. Hallo.

              da frage ich mich erstens, was der "Nummernblock" damit überhaupt zu tun hat - erstens haben ihn einige meiner Tastaturen gar nicht, und selbst bei denen, die ihn haben, fristet er bei mir ein Schattendasein, weil ich zur Eingabe von Zahlen die obere Reihe des alphanumerischen Tastenfeldes praktischer finde.

              Dein persönliches Empfinden spielt in Bezug auf die erlernte und bevorzugte Handhabung seitens Datentypisten keine Rolle.

              Zweitens produziert die mittlere Taste in der unteren Reihe des numerischen Tastenblock ("DEL") selbstverständlich einen Dezimal_punkt_, wenn NumLock versehentlich mal eingeschaltet sein sollte.

              Die mittlere Taste in der untersten Reihe des sinnvollerweise permanent aktivierte numerische Tastenblocks produziert das jeweilige Dezimaltrennzeichen. Welches das hierzulande ist, kannst du gern nachschlagen. Welches der Fragesteller verwendet, ebenfalls.

              Ich würd's genau andersrum machen ...

              Damit kann ich gut leben. Nur löst du so eben nicht das Problem des Fragestellers.
              MfG, at

              1. Tach,

                Die mittlere Taste in der untersten Reihe des sinnvollerweise permanent aktivierte numerische Tastenblocks produziert das jeweilige Dezimaltrennzeichen. Welches das hierzulande ist, kannst du gern nachschlagen. Welches der Fragesteller verwendet, ebenfalls.

                welches das ist, hängt davon ab, welches man verwenden möchte. In Deutschland wird üblicherweise das SI verwendet, hier wird das Dezimaltrennzeichen folgend festgelegt: "The 22nd General Conference [...] declares that the symbol for the decimal marker shall be either the point on the line or the comma on the line, reaffirms that "Numbers may be divided in groups of three in order to facilitate reading; neither dots nor commas are ever inserted in the spaces between groups", as stated in Resolution 7 of the 9th CGPM, 1948." - Quelle Bureau international des poids et mesures.
                Das entspricht auch meiner Erfahrung, während im Alltagsleben in Deutschland meist das Komma verwendet wird, war es an der Uni häufig der Punkt.

                mfg
                Woodfighter

                1. Tach,

                  Das entspricht auch meiner Erfahrung, während im Alltagsleben in Deutschland meist das Komma verwendet wird, war es an der Uni häufig der Punkt.

                  Ergänzung: Mein Duden (von 1991) schreibt in Regel R 201 das Komma vor.

                  mfg
                  Woodfighter

                2. gudn tach!

                  In Deutschland wird üblicherweise das SI verwendet

                  (imho leider) nein. obwohl sich hier iso, din und duden "einig" sind, dass weder punkte noch kommas als tausendertrennzeichen verwendet werden sollen (din und iirc duden erlauben ausnahmen bei geldbetraegen), verwenden die meisten deutschen die punkte eben doch zur zifferngruppierung. sogar in der wikipedia hat sich nach jahre- und kilometerlangen diskussionen bisher der imho unenzyklopaedische punkt als tausendertrennzeichen durchgesetzt.

                  prost
                  seth