Floating point numbers (in this case doubles) cannot represent decimal values exactly. I would recommend reading David Goldberg’s What every computer scientist should know about floating-point arithmetic
This applies to all languages that deal with floating point numbers whether it be C#, Java, JavaScript, … This is essential reading for any developer working with floating point arithmetic.
As VinayC suggests, if you need an exact (and slower) representation, use System.Decimal
(aka decimal
in C#) instead.