Das liegt an der internen Binärdarstellung, das ist schon korrekt so. Wenn du eine bestimmte Anzahl Nachkommastellen möchtest, musst du das entsprechend formatiert ausgeben, z.B. mit dem Format %.2f.
Ein Computer kann wenige Gleitkommazahlen speichern und mit denen korrekt rechnen. Unter anderem müssen alle Gleitkommazahlen auf 5 enden, aber selbst von denen gehen die meisten nicht. 0,25+0,5 kann ein Computer beispielsweise berechnen, 0,15+0,5 hingegen nicht.
Alternative ist Currency. Das ist ein Int64, das implizit als Zehntausendstel behandelt wird. Du kannst also Zahlen mit vier Nachkommastellen exakt darin speichern und berechnen. Dafür musst du aber wissen, dass du niemals mit mehr als vier Nachkommastellen arbeiten musst.
Anmerken will ich hier noch die Funktion IsZero(...)
, die im Grunde die selbe Funktion wie SameValue(..., 0)
erfüllt, nur dass sie auf das zero-flag prüft.