Суффикс объявления для десятичного типа

Если я хочу использовать десятичный литерал в коде, я видел, что существует m-суффикс (где m означает деньги). Является ли это подходящим для любых десятичных знаков или существует более общее присваивание (d означает двойное, то есть для shure не правильное, хотя поддерживается прямое преобразование).

object decimalValue=2m;

Обратите внимание, что я взял объект-назначение в качестве примера, потому что в случае...

decimal decimalValue=2;

... его неявное понимание того, что 2 следует интерпретировать как десятичное с помощью компилятора.

EDIT: m выглядит нормально, msdn использует его в качестве примера для десятичного типа.

Ответ 1

Документировано в Спецификация языка С#, глава 2.4.4:

float f = 1.2f;
double d = 1.2d;
uint u = 2u;
long l = 2L;
ulong ul = 2UL;
decimal m = 2m;

Ничего для int, byte, sbyte, short, ushort.

Ответ 2

Без суффикса числовой реальный литерал будет двойным. Суффикс m указывает, что числовой реальный литерал должен быть десятичным.

Это действительно важно знать, так как арифметика значений с плавающей запятой (например, Double) является неточной. Например:

object decimalValue=(5.32 + 2.23);

Здесь decimalValue фактически будет содержать Double, с неожиданным значением 7.5500000000000007! Если я хочу 7.55, я мог бы сделать это:

object decimalValue=(5.32m + 2.23m);

Чтобы ответить на ваш вопрос о том, существует ли более общий суффикс, m является единственным суффиксом для Decimal в С#. Это может стоить денег, как вы упомянули, но они использовали что-то другое, чем d, поскольку это используется Double!

Дополнительная литература: decimal (ссылка на С#)

Ответ 3

Короткий ответ Объявить десятичный номер в С#

decimal firstMoney = 141.28m;

O/P: 141.28

decimal secondMoney = 100.00m;

O/P: 100

Подробнее см. MSDN.

Надежда помогает кому-то.