Gleitkommazahlen, oder: 3.9+0.05?

 9. März 2024 •  Ekkart •  Computer, JavaScript, Programmierung •  Computer

Es ist manchmal ein Kreuz.

Gibt man in LibreOffice Calc oder Excel ein: =3.9+0.05 oder =3,9+0,05, je nachdem, ob Komma oder Punkt für “Kommazahlen” genutzt werden, ist das Ergebnis: 3.95 oder 3,95

Gibt man Gleiches in JavaScript ein, kommt 3.9499999999999997 raus.

Nachprüfen? Browser Deiner Wahl öffnen, mit Strg+Shift+I in den Entwicklermodus gehen, dort auf “Console” klicken, dann eingeben:

>> console.log(3.9+0.05)
3.9499999999999997

Wie kann man das jetzt umgehen? Indem ein Korrekturfaktor eingezogen wird, z.B. 1000:

>> console.log(((3.9*1000)+(0.05*1000))/1000)
3.95

Warum das passiert, warum der Faktor hilft und wie groß er sein sollte? Hausaufgabe 😄

Daher gibt es jetzt folgende Hilfskonstrukte in meinem Code:

const CORRECTION_FACTOR = 100000
function addCorrectedFloat(num1, num2) {
  return ((num1 * CORRECTION_FACTOR) + (num2 * CORRECTION_FACTOR)) / CORRECTION_FACTOR;
}