Solo para dar la razón detrás de lo que todos los demás dicen.
La representación binaria de un flotador es un poco molesta.
En binario, la mayoría de los programadores conocen la correlación entre 1b = 1d, 10b = 2d, 100b = 4d, 1000b = 8d
Bueno, también funciona a la inversa.
.1b = .5d, .01b = .25d, .001b = .125, ...
El problema es que no hay una forma exacta de representar la mayoría de los números decimales como .1, .2, .3, etc. Todo lo que puede hacer es aproximarse en binario. El sistema hace un poco de redondeo cuando se imprimen los números para mostrar .1 en lugar de .10000000000001 o .999999999999 (que probablemente estén tan cerca de la representación almacenada como .1)
Editar del comentario: La razón por la que esto es un problema son nuestras expectativas. Esperamos totalmente que 2/3 se falsifique en algún momento cuando lo convertimos a decimal, ya sea .7 o .67 o .666667 .. Pero no esperamos automáticamente que .1 se redondee de la misma manera que 2/3 Y eso es exactamente lo que está sucediendo.
Por cierto, si tiene curiosidad, el número que almacena internamente es una representación binaria pura usando una "notación científica" binaria. Entonces, si le dice que almacene el número decimal 10.75d, almacenaría 1010b para el 10 y .11b para el decimal. Por lo tanto, almacenaría .101011 y luego guardaría algunos bits al final para decir: Mueva el punto decimal cuatro lugares a la derecha.
(Aunque técnicamente ya no es un punto decimal, ahora es un punto binario, pero esa terminología no habría hecho las cosas más comprensibles para la mayoría de las personas que encontrarían esta respuesta útil).