Wenn du in JavaScript oder Python 0.1 + 0.2 eingibst, lautet das Ergebnis 0.30000000000000004 und nicht 0,3. Das passiert auf jedem Computer, weil er Dezimalzahlen als Brüche mit dem Nenner 2, 4, 8, 16 … speichert und sich 0,1 so nicht schreiben lässt. Die Rechnung mit Brüchen, 1/10 + 2/10, ergibt dagegen genau 3/10, ohne etwas zu verlieren.
Rechenbeispiel: dieselbe Summe mit Brüchen
Addiere 0,1 und 0,2 ohne Binärzahlen.
- Schreibe jede Dezimalzahl als Bruch. 0,1 = 1/10 und 0,2 = 2/10.
- Addiere die Zähler. Die Nenner sind schon gleich: 1 + 2 = 3.
- Behalte den Nenner. Das Ergebnis lässt sich nicht kürzen.
Ergebnis: 0,3, ohne Fehler.
Probe: 3/10 sind drei Zehntel, und 0,1 + 0,2 sind ebenfalls drei Zehntel.
Um eine beliebige Dezimalzahl in einen Bruch zu verwandeln, nutze den Rechner Dezimalzahl in Bruch, der von den Ziffern ausgeht, die du eingegeben hast.
Was der Computer wirklich speichert
Programmiersprachen verwenden fast immer Gleitkommazahlen mit doppelter Genauigkeit (IEEE 754). Jede davon ist ein Bruch, dessen Nenner eine Zweierpotenz ist. Schreibst du 0,1, speichert das Programm den nächstgelegenen solchen Bruch: 3602879701896397/2⁵⁵, und der hat den Wert 0,1000000000000000055511151231257827… Er ist ein wenig größer als 0,1. Die Python-Dokumentation gibt an, dass für 0.1 der Binärbruch 3602879701896397 / 2**55 gespeichert wird, der nahe an 1/10 liegt, aber nicht gleich ist.
Die Anzeige rundet, deshalb sieht 0.1 richtig aus. Lässt du mehr Stellen ausgeben, kommt der Unterschied zum Vorschein.
| Du schreibst | Gespeichert wird | Abweichung vom Geschriebenen |
|---|---|---|
| 0,1 | 0,1000000000000000055511… | +5,6 × 10⁻¹⁸ |
| 0,2 | 0,2000000000000000111022… | +1,1 × 10⁻¹⁷ |
| 0,3 | 0,2999999999999999888977… | −1,1 × 10⁻¹⁷ |
| Gespeicherte Summe von 0,1 + 0,2 | 0,3000000000000000444089… | +4,4 × 10⁻¹⁷ gegenüber 0,3 |
Das gespeicherte 0,2 ist genau das Doppelte des gespeicherten 0,1 und hat deshalb auch den doppelten Fehler. Beim Addieren wird das Ergebnis erneut auf den nächsten Binärbruch gerundet, und diese Zahl ist eine andere als die, die für 0,3 gespeichert wurde. Beide liegen auf verschiedenen Seiten von 3/10, darum ist der Vergleich 0.1 + 0.2 == 0.3 falsch. Die Addition des Computers ist korrekt ausgeführt; anders sind nur die Zahlen, mit denen sie beginnt.
Warum 1/10 im Binärsystem nicht passt
Ein vollständig gekürzter Bruch hat in einem Stellenwertsystem genau dann eine endliche Schreibweise, wenn sein Nenner nur Primfaktoren der Basis enthält. In Basis 10 sind das die 2 und die 5. In Basis 2 nur die 2. Der Nenner 10 enthält eine 5, also wiederholt sich 1/10 im Binärsystem endlos: 0,000110011…₂ mit dem Block 0011. Es ist dasselbe Phänomen, das 1/3 in Basis 10 zu 0,333… macht, nur mit einer anderen Primzahl und einer anderen Basis. Der Ratgeber zu Brüchen mit abbrechender Dezimalzahl entwickelt die Regel für Basis 10, und der zu endlichen und periodischen Dezimalzahlen erklärt, wie man eine Periode schreibt.
Um beide Fälle zu unterscheiden, schau dir den Nenner nach dem Kürzen an.
| Dezimalzahl | Bruch | Binär exakt? |
|---|---|---|
| 0,5 | 1/2 | Ja, Nenner 2 |
| 0,125 | 1/8 | Ja, Nenner 8 = 2³ |
| 0,625 | 5/8 | Ja, 0,101₂ |
| 0,2 | 1/5 | Nein, der Nenner 5 ist keine Zweierpotenz |
| 0,3 | 3/10 | Nein, der Nenner 10 enthält eine 5 |
| 0,75 | 3/4 | Ja, Nenner 4 |
Von den Zehnteln wird nur 0,5 fehlerfrei gespeichert; Viertel und Achtel ebenfalls. Welche Dezimalzahl zu einem beliebigen Bruch gehört und ob sie abbricht oder sich wiederholt, zeigt der Rechner Bruch in Dezimalzahl.
Was du in der Praxis tun kannst
Es gibt drei Wege, je nachdem, was du brauchst.
- Vergleichen: Nimm zwei Werte als gleich an, wenn ihre Differenz kleiner ist als eine Toleranz, die zu deinem Problem passt. Python bietet dafür
math.isclose(). - Genau rechnen: Verwende Brüche oder Dezimalarithmetik. Python enthält die Module
fractionsunddecimal; Letzteres ist laut Dokumentation für Buchhaltung und hohe Genauigkeit gedacht. - Anzeigen: Runde erst beim Ausgeben. Der gespeicherte Wert ändert sich dadurch nicht.
Bei Geldbeträgen kannst du alternativ in Cent mit ganzen Zahlen rechnen und nur zur Anzeige durch 100 teilen. Ganze Zahlen bis 2⁵³ werden ohne Verlust gespeichert, jede Addition ist also fehlerfrei. Die konkrete Entscheidung hängt vom jeweiligen System ab.
Der Rechner auf dieser Website folgt demselben Prinzip: Er arbeitet mit ganzen Zahlen und Brüchen, deshalb liefert 0,1 + 0,2 im Bruchrechner den Wert 3/10. Die Dezimalzahl, die du siehst, ist nur eine Darstellung des Ergebnisses; der Bruch bleibt der Bezugswert. Wie die Rechnungen ausgeführt und geprüft werden, steht auf der Seite Methodik.
Quelle: Python-Dokumentation auf Deutsch, Gleitkommaarithmetik: Probleme und Einschränkungen (abgerufen am 17. Oktober 2026). Die Werte in der Tabelle wurden mit exakter Bruchrechnung überprüft.