Является ли десятичное округление C#непоследовательным?

Я боролся с десятичной точностью в C#, полученной из десятичного числа SQL (38,30), и я Наконец-то я добрался до округляющей странности. Я знаю, что, вероятно, упускаю из виду очевидное, но мне нужно немного понимания.

Проблема, с которой я столкнулся, заключается в том, что C#не производит то, что я считаю согласованным выводом.

decimal a = 0.387518769125m;
decimal b = 0.3875187691250002636113061835m;

Console.WriteLine(Math.Round(a, 11));
Console.WriteLine(Math.Round(b, 11));
Console.WriteLine(Math.Round(a, 11) == Math.Round(b, 11));

Урожайность

0.38751876912
0.38751876913
False

Э-э, 0,38751876913? Действительно? Что мне здесь не хватает?

Из MSDN:

Если цифра в десятичном разряде нечетная, она заменяется четной цифрой. В противном случае он остается без изменений.

Почему я вижу противоречивые результаты? Дополнительная точность не изменяет «цифру в позиции после запятой»...

38
задан Bennett Dill 12 April 2012 в 16:06
поделиться