Hier im Forum bekommt ihr bei euren fragen schnelle hilfe.Hier geht es rund um das Web SeitenProgrammieren.Alles rund ums Javascript,Html,Php,Css und Sql.Auf fast allen Fragen haben wir eine Antwort.
Der Soforthilfe-chat verspricht das ,was sein Name sagt. Hier sind Leute Online die sofort ihre hilfe anbieten.Seht in der OnlineListe nach und wenn einer Online ist werdet ihr auch antwort bekommen. Admine ,Moderatoren und Helfer sind unsere Spezialisten in Sachen Web Programierung
71 Unwetterwarnungen in Deutschland
Die Datenbank wurde zuletzt am 02.08.2020 17:34:28 aktualiesiert
71

Rechenungenauigkeit mit Javascript – Warum?

Schonmal in Javascript über ungenaue Berechnungen aufgeregt?

<script> alert(0.2 + 0.4); </script> 

Ergebnis?

Das Problem ist mit parseFloat ja schnell behoben, aber darum gehts mir hier garnicht. Warum kriegt Javascript kein sauberes Ergebnis zustande, wohingegen bei 0.2 + 0.3 glatt 0.5 rauskommt? Javascript rechnet intern binär. Und Zahlen, die im Zehnersystem wunderbar aufgehen, können im Dualsystem unter Umständen periodisch sein. So auch die 0.6. Schauen wir uns mal die Berechnung an:

  1. Vor dem Komma hat unser Ergebnis logischerweise eine 0
  2. Die Zahl wird mit 2 multipliziert (0.6 * 2 = 1.2)
  3. Der „Vorkommaanteil“ von oben ist die erste Stelle der gesuchten Binärzahl, also 1. Damit haben wir bisher 0.1
  4. Jetzt wird die Vorkommastelle weggeworfen und der Rest wieder mit 2 multipliziert. Heißt: Aus 1.2 wird 0.2. Nun ergibt 0.2 * 2 = 0.4 -> Damit ist die nächste Nachkommastelle des Ergebnisses wieder eine 0, also bisher 0.10
  5. Das geht jetzt immer so weiter: 0.4 * 2 = 0.8 -> Wieder eine 0 mehr
  6. 0.8 * 2 = 1.6 -> Eine 1 dazu
  7. 0.6 * 2 = 1.2 -> Eine 1 dazu
  8. Ab hier wiederholt sich das Ganze (siehe zweiter Schritt). Damit ist das Ergebnis 0.10011 10011 10011 10011 …..

Die ebenfalls angesprochene 0.5 hat das Problem nicht. Die ergibt binär nämlich glatt 0.1.

Fazit

Javascript kann nur „glatte“ Zahlen liefern, wenn das Ergebnis im Binärsystem nicht periodisch ist.