120
votes

If I want to use a decimal literal in code, I have seen that there exists the m-suffix (where m stands for money). Is this appropriate for any decimals or is there a more general assignment (d stands for double, that is for sure not the right thing although a direct conversion is supported).

object decimalValue=2m;

Please note, I took the object-assignment as example, because in the case of ...

decimal decimalValue=2;

... it's implicitly clear that 2 should be interpreted as decimal through the compiler.

m seems to be ok, msdn uses it as example for the decimal type.

3
M could stand for money but it could just be the next available letter of the word “decimal” because D is used for double and E is used as the exponential symbol as in ‘1E06’ for example.Caltor

3 Answers

250
votes

Documented in the C# language specification, chapter 2.4.4:

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

Nothing for int, byte, sbyte, short, ushort.

22
votes

Without a suffix, a numerical real literal will be a Double. The m suffix specifies that a numeric real literal should be a Decimal.

This is actually important to know, since arithmetic on floating point values (such as Double) is imprecise. For instance:

object decimalValue=(5.32 + 2.23);

Here, decimalValue will actually contain a Double, with the unexpected value of 7.5500000000000007! If I want 7.55, I could do this:

object decimalValue=(5.32m + 2.23m);

To answer your question about whether there is a more general suffix, m is the only suffix for Decimal in C#. It might stand for money as you mentioned, but they had do use something other than d, since that's used by Double!

Further reading: decimal (C# Reference)

1
votes

Short answer to Declare Decimal in C#

decimal firstMoney = 141.28m;

O/P: 141.28

decimal secondMoney = 100.00m;

O/P: 100

For more refer MSDN.

Hope helps someone.