Cruz: Seltsame Addition

0.33 + 0.09 sind laut JavaScript 0.42000000000000004

Gibt es eine Möglichkeit Math.round() auf die 2. Kommastelle zu beschränken?

Ich habe eine Routine, die eine ziemlich große Tabelle mit Kommazahlen berechnen muss.
Ich habe auch versucht sie erst alle x100 zu nehmen und dann zu addieren und dann wieder /100 zu teilen, aber trotzdem tauchen noch ein paar solche wilde Zahlen auf.

Hat Jemand einen Tipp, wie ich in JavaScript mit Kommazahlen am besten umgehen kann?
Wie z.B. der Variablentyp "float" bei C++...

Cruz

  1. Ah ok ich habs jetzt danke!

    1. Hi,

      Ah ok ich habs jetzt danke!

      es ist gut möglich, daß irgendjemand mal auf Deine Frage stößt, weil er das selbe Problem hat. In dem Fall wäre er an Deiner Lösung sicherlich interessiert. Könntest Du also bitte beschreiben, wie Du Dein Problem nun gelöst hast? :-)

      Cheatah

      1. es ist gut möglich, daß irgendjemand mal auf Deine Frage stößt, weil er das selbe Problem hat. In dem Fall wäre er an Deiner Lösung sicherlich interessiert. Könntest Du also bitte beschreiben, wie Du Dein Problem nun gelöst hast? :-)

        Kein Problem!
        Also...ich muss jede Menge Kommazahlen addieren. Bei der Addition sind jede Menge unannehmlichekeiten aufgetaucht, wie z.B.  daß 0.09 + 0.31 = 0.400000000001 ist.

        Ich habe das Problem gelöst, indem ich die Kommazahlen erstmal mit 100 multipliziert habe. Dann habe ich sie addiert und mit Math.round() aufgerundet. Dann das Ergebnis wieder durch 100 geteilt.

        var one=0.09*100;
        var two=0.31*100;
        val=Math.round(one+two)/100;

        Gruß
        Cruz

        1. Ich habe das Problem gelöst, indem ich die Kommazahlen erstmal mit 100 multipliziert habe. Dann habe ich sie addiert und mit Math.round() aufgerundet. Dann das Ergebnis wieder durch 100 geteilt.

          Brauchst Du denn wirklich irgendwo die Kommazahlen, außer für eine Anzeigefunktion?

          Ich vermute, Du willst mit Geldbeträgen etc rechnen. Die einzige zuverlässige Methode, die ich dafür kenne (unabhängig von der verwendeten Sprache), ist integer auf Pfennig-Basis, nie runden und bloß bei der Anzeige von Werten entsprechenden Strings bauen.

          Also: 31 + 9 fehlerfrei rechnen und später daraus "0.40" konstruieren.