JavaScript 0.097*100 bug!?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • JavaScript 0.097*100 bug!?

    Hiho zusammen,

    ich bin gerade am verzweifeln...
    Hab ihr mal versucht 0.097*100 mit javascript zu rechnen?
    Das Ergbnis ist 9.700000000000001. ???
    Wenn ich aber 0.097*10*10 rechne, kommt das richtige heraus!
    Hat irgendwer eine logische Erklärung dafür?

    Cheers Mirko

    P.S.: Ich glaub ich mach mir eine Signatur mit:
    alert(0.097*100) = WTF

  • #2
    habe mal eben unserer mathematiker gefragt. der vermutet einen rundungsfehler, weill 0.097 sich binär nicht richtig darstellen läßt. und bei 0.096 * 100 ist ja auch wieder alles feini feini. außerdem reden wir hier von javascript.

    gruß
    peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      Den Fehler findest du bei google oder wahrscheinlich sogar hier im Forum schon 100 Mal. Es ist ein schon lange bekanntes Problem bei javascript. Letzte Ziffer wegschneiden und es geht wieder.

      Kommentar


      • #4
        Wie Kropff schon sagte hängt das wohl damit zusammen, dass sich nicht alle Zahlen GENAU binär abbilden lassen (d.h. binär lassen sich gewisse Zahlen nicht genau mit der maximalen erlaubten Anzahl Bits darstellen). Das Problem kennt nahezu jede Programmiersprache. Für JS gibt es eine BigDecimal Klasse http://freshmeat.net/projects/js_bigdecimal/ welche das Problem bis zu einer gewissen Zahlengrösse umgehen kann.
        Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

        [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
        Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

        Kommentar


        • #5
          Re: JavaScript 0.097*100 bug!?

          Original geschrieben von Mayko
          Hat irgendwer eine logische Erklärung dafür?
          Schon einfache Dezimalzahlen, z. B. 0,1, können nicht mehr exakt als binäre Gleitkommazahlen dargestellt werden, da viele im Dezimalsystem abbrechende Kommazahlen im Binärsystem nicht abbrechende, periodische Zahlen sind; von diesen werden nur die ersten p Ziffern gespeichert, wodurch Ungenauigkeit entsteht. Dezimal 0,1 ist binär 0,0001100110011… In einem binären Gleitkommasystem ist also 10 · 0,1 < 1, da die 0,1 abgerundet wird und nicht den exakten Wert approximiert.

          http://de.wikipedia.org/wiki/Gleitkommazahl

          Wenn du ganze Zahlen willst, musst du runden.

          Kommentar

          Lädt...
          X