Возможный дубликат:
В С#: результат Math.Round(2.5) равен 2 (вместо 3)! Вы издеваетесь надо мной?
Функция Math.Round для .Net 3.5 SP1, по-видимому, составляет от 0,5 до нуля, тогда как она округляется от 1,5 до 2,0. Я проверил это с десятичными числами и следующим кодом:
decimal pos = 0.5m;
decimal neg = -0.5m;
Console.WriteLine("Pos: {0} Rnd: {1}", pos, Math.Round(pos));
Console.WriteLine("Neg: {0} Rnd: {1}", neg, Math.Round(neg));
Console.ReadKey();
Этот код выводит следующее:
Поз: 0.5 Rnd: 0 Neg: -0.5 Rnd: 0
Это похоже на вопиющую ошибку. Известна ли работа? Я тестировал это на процессоре Core2 и i7, поэтому он не выглядит аппаратным. И Reflector просто говорит, что функция decimal.round в конечном итоге вызывает системный вызов.
Сообщите мне, если кто-нибудь еще это увидит.