Apenas para dar a razão por trás do que todo mundo está dizendo.
A representação binária de um flutuador é meio irritante.
Em binário, a maioria dos programadores conhece a correlação entre 1b = 1d, 10b = 2d, 100b = 4d, 1000b = 8d
Bem, funciona da outra maneira também.
.1b = .5d, .01b = .25d, .001b = .125, ...
O problema é que não há maneira exata de representar a maioria dos números decimais, como .1, .2, .3, etc. Tudo o que você pode fazer é aproximar em binário. O sistema faz um pequeno arredondamento quando os números são impressos para exibir .1 em vez de .10000000000001 ou .999999999999 (que provavelmente estão tão próximos da representação armazenada quanto a .1)
Editar a partir do comentário: a razão pela qual este é um problema são as nossas expectativas. Esperamos totalmente que 2/3 sejam falsificados em algum momento quando o convertermos em decimal, 0,7 ou 0,67 ou 0,6666667 .. Mas não esperamos automaticamente que o valor 1 seja arredondado da mesma maneira que 2/3 --e é exatamente isso que está acontecendo.
A propósito, se você estiver curioso, o número armazenado internamente é uma representação binária pura usando uma "Notação científica" binária. Portanto, se você disser para armazenar o número decimal 10.75d, ele armazenará 1010b para o 10 e 0,11b para o decimal. Assim, ele armazenaria .101011 e, em seguida, salva alguns bits no final para dizer: Mova o ponto decimal quatro casas para a direita.
(Embora tecnicamente não seja mais um ponto decimal, agora é um ponto binário, mas essa terminologia não tornaria as coisas mais compreensíveis para a maioria das pessoas que acharia essa resposta de qualquer utilidade.)