Wydaje mi się, iż jest to dokładnie taki sam problem, na który już udzieliłem odpowiedź, więc zacytuję:
Jest to spowodowane sposobem zapisu liczby float.
Liczba float jest reprezentowana przez standard binarny IEE754, czyli w uproszczeniu przy użyciu kodu binarnego.
Jak wiemy, w reprezentacji binarnej nie jesteśmy w stanie zapisać niektórych części ułamkowych, np nie jesteśmy w stanie zapisać 0.1. W zamian za nią będzie zapisana najbliższa jej liczba możliwa do zapisania w kodzie binarnym, czyli dla 0.1 jest to 0.00011001100 binarnie, które w rzeczywistości jest równe 0.099609375 dziesiętnie.
Oczywiście w twoim przypadku zamiast floata mamy doczynienia z double.
Dowód: LINK
Możemy z tego wywnioskować, iż wartość 0.1, jest wartością zaokrągloną.