Используйте Math.Floor , если хотите округлить до этого значения, или Math.Round , если хотите получить точный раунд. Math.Truncate просто удаляет десятичную часть числа, чтобы получить отрицательные результаты для отрицательных чисел:
var result= Math.Floor(number * 100) / 100;
Math.Floor всегда возвращает наименьшее целое значение, которое меньше (Floor) или больше (Ceiling), чем указанное значение. Таким образом, вы не получите правильное округление. Пример:
Math.Floor(1.127 * 100) / 100 == 1.12 //should be 1.13 for an exact round
Math.Ceiling(1.121 * 100) / 100 == 1.13 //should be 1.12 for an exact round
Всегда предпочитайте версию Math.Round, содержащую параметр округления средней точки. Этот параметр указывает, как обрабатывать значения средней точки (5) как последнюю цифру.
Если вы не укажете AwayFromZero в качестве значения параметра, вы получите поведение по умолчанию - ToEven.
Например, используя ToEven в качестве метода округления, вы получаете:
Math.Round(2.025,2)==2.02
Math.Round(2.035,2)==2.04
вместо этого, используя параметр MidPoint.AwayFromZero:
Math.Round(2.025,2,MidpointRounding.AwayFromZero)==2.03
Math.Round(2.035,2,MidpointRounding.AwayFromZero)==2.04
Итак, для нормального округления лучше всего использовать этот код:
var value=2.346;
var result = Math.Round(value, 2, MidpointRounding.AwayFromZero);