Математически правильное округление до двух десятичных знаков равно 3106,46.
То, что вам, вероятно, нужно, это потолок :
Math.Ceiling(3106.4647771976413339683766317M * 100) / 100
производит 3106,47. Не существует версии Math.Ceiling
, принимающей количество знаков после запятой, поэтому есть умножение и деление.
Кроме того, обратите внимание, что в этом выражении есть оговорка:
Math.Round(value, 2, MidpointRounding.AwayFromZero)
Math.Round
не имеет варианта с тремя аргументами, где первый - decimal
. Это работает, потому что значение неявно преобразуется в double
. Однако это нежелательно.