Nur um den Grund für das zu nennen, was alle anderen sagen.
Die binäre Darstellung eines Floats ist irgendwie nervig.
In der Binärdatei kennen die meisten Programmierer die Korrelation zwischen 1b = 1d, 10b = 2d, 100b = 4d, 1000b = 8d
Nun, es funktioniert auch umgekehrt.
.1b = .5d, .01b = .25d, .001b = .125, ...
Das Problem ist, dass es keine genaue Möglichkeit gibt, die meisten Dezimalzahlen wie .1, .2, .3 usw. darzustellen. Alles, was Sie tun können, ist eine ungefähre Angabe in Binärform. Das System führt beim Drucken der Zahlen eine kleine Fudge-Rundung durch, sodass .1 anstelle von .10000000000001 oder .999999999999 angezeigt wird (die wahrscheinlich genauso nahe an der gespeicherten Darstellung liegen wie .1).
Aus Kommentar bearbeiten: Der Grund, warum dies ein Problem ist, sind unsere Erwartungen. Wir gehen davon aus, dass 2/3 irgendwann verfälscht wird, wenn wir es in Dezimalzahlen umwandeln, entweder .7 oder .67 oder .666667. Wir erwarten jedoch nicht automatisch, dass .1 auf die gleiche Weise wie 2/3 gerundet wird --und genau das passiert.
Übrigens, wenn Sie neugierig sind, ist die Zahl, die intern gespeichert wird, eine reine binäre Darstellung unter Verwendung einer binären "wissenschaftlichen Notation". Wenn Sie also anweisen, die Dezimalzahl 10.75d zu speichern, werden 1010b für die 10 und .11b für die Dezimalzahl gespeichert. Es würde also .101011 speichern, dann werden am Ende einige Bits gespeichert, um zu sagen: Verschieben Sie den Dezimalpunkt um vier Stellen nach rechts.
(Obwohl es technisch gesehen kein Dezimalpunkt mehr ist, ist es jetzt ein Binärpunkt, aber diese Terminologie hätte die Dinge für die meisten Menschen, die diese Antwort von Nutzen finden würden, nicht verständlicher gemacht.)