Разница действительно есть, но она, скорее всего, не будет проблемой, если вы об этом знаете.
Во-первых, как указал Бен Коттрелл в своем ответе, все эти значения будут равны,Фактически decimal a = 0;
приведёт значение 0
к 0m
, что делает его фактически идентичным b
.И a
, и b
будут проверяться как равные 0.00m
или любому другому изменению числа десятичных знаков.
Разница заключается в том, когда вы смотрите на внутренние органы.Это действительно актуально только тогда, когда вы сериализуете десятичные числа как байтовые массивы или используете массив, возвращаемый decimal.GetBits()
.В этом случае 0M
равен 16 x 0 байтов, а 0.00M
имеет масштаб 2, поэтому один из байтов в двоичном представлении (байт 14) не равен нулю.
Также строковая формаони будут различаться, поэтому сравнение строк не удастся:
decimal a = 0M;
decimal b = 0.00M;
if (a.ToString() != b.ToString())
Console.WriteLine($"'{a}' != '{b}'");
Таким образом, пока они равны, они все равно различны.