При различном порядке операций ошибки двоичного округления с плавающей запятой, по-видимому, распространяются по-разному. Вы можете получить «менее удивительные», но потенциально более медленные результаты с типом Decimal.
3,2 * 1,0 / (1,0 / 1000000,0) -> 3200000,0000000005
(попробуйте (3.2 * 1.0 / (1.0 / 1000000.0) ).ToString("R");
3,2 * (1,0 / (1,0 / 1000000,0)) -> 3200000,0
Если вы еще не понимаете различий между типами с плавающей точкой и десятичными, прочитайте: http://docs.sun.com/source/806-3568/ncg_goldberg.html
Или, если вы предпочитаете что-то на простом английском:
http://floating -point-gui.de /