One can surprise why d1 does not equal d2 in the next example
d1 = . - . ; d2 = . ; Assert.AreNotEqual(d1, d2);
This is a normal behaviour :)
However there are some funny bugs in .NET (imho). For example,
Decimal.Convert(1.51m) != Convert.ToInt32(1.51m);
More cases with explanation can be found at my Go to Basic/ .NET Floating Numbers tips and tricks at codeproject.