Используйте «округление банкира» и «нормальное округление» в C#
По умолчанию метод Math.Round использует «округление банкира». При округлении банкира число с конечной цифрой 5 округляется до ближайшего четного числа, а не до следующего большего числа, так как вы возможно. Идея состоит в том, что статистически половина выборки номеров округляется, а половина округляется вниз.
Например, если вы хотите округлить до ближайшей десятой, значения 1.35 и 1.45 округляются до 1.4, потому что 4 является ближайшим даже десятым.
В отличие от обычного округления значения округляются до нуля. Например, 1.45 округляется до 1,5 и -1,45 округляется до -1,5.
Обратите внимание, что ни одно правило не требуется, если число не заканчивается на 5 в последней цифре, и эта цифра должна быть следующей после наименьшей цифры, которую вы хотите сохранить. Например, предположим, что вы округлите до ближайшей десятой. Значение 1.4500001 немного больше 1,45, поэтому оно округляется до 1,5, независимо от того, какую схему округления вы используете.
Метод Math.Round может принимать до трех параметров: число до раунда, количество цифр после десятичной точки для отображения и флаг, указывающий на способ использования округления или округления банкира округлить от 0.
Следующий код демонстрирует использование округления и нормального округления банкира.
// По умолчанию округление банкира дает 1.4. double i = Math.Round(1.45, 1); // Округление от 0 дает 1.5. double j = Math.Round(1.45, 1, MidpointRounding.AwayFromZero);