From MSDN:
If there is a single non-zero digit in
dto the right of thedecimalsdecimal position and its value is5, the digit in the decimals position is rounded up if it is odd, or left unchanged if it is even. Ifdhas fewer fractional digits thandecimals,dis returned unchanged.
In your first case
decimal a = 0.387518769125m;
Console.WriteLine(Math.Round(a, 11));
there is a single digit to the right of the 11th place, and that number is 5. Therefore, since position 11 is even, it is left unchanged. Thus, you get
0.38751876912
In your second case
decimal b = 0.3875187691250002636113061835m;
Console.WriteLine(Math.Round(b, 11));
there is not a single digit to the right of the 11th place. Therefore, this is straight up grade-school rounding; you round up if the next digit is greater than 4, otherwise you round down. Since the digit to the right of the 11th place is more than 4 (it’s a 5), we round up so you see
0.38751876913
Why am I seeing inconsistent results?
You’re not. The results are completely consistent with the documentation.