The problem with double/float's is that they are binary numbers, aka 1000110.10101001 internally, and therefore only represent an approximate representation of your values.
Read Jon Skeet's explanation: Difference between decimal, float and double in .NET?