Я сражался с десятичной точностью в С#, исходящей из SQL Decimal (38,30), и я, наконец, сделал все возможное для округления странности. Я знаю, что я, вероятно, не замечаю здесь очевидного, но мне нужно немного понять.
Проблема, с которой я сталкиваюсь, заключается в том, что С# не создает то, что я считаю совместимым.
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
Uhh, 0.38751876913? В самом деле? Что мне здесь не хватает?
От MSDN:
Если цифра в позиции десятичного разряда нечетна, она изменяется на четную цифру. В противном случае он остается неизменным.
Почему я вижу противоречивые результаты? Дополнительная точность не меняет "цифру в десятичном положении"...