tags:

views:

97

answers:

2

If I want 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 exists a more general assigment (d stands for double, that is for shure 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;

... its implicit clear that 2 should be interpreted as decimal through the compiler.

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

+7  A: 

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 byte, sbyte, short, ushort.

Hans Passant
+2  A: 

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: http://msdn.microsoft.com/en-us/library/364x0z75(VS.71).aspx

Brian MacKay
Thanks, I have seen and put the msdn-link into my question exactly as you entered your answer. However I accepted the post of Hans Passant because there is a nice list that will help a lot to people who will come to this post because of the suffixes. But thanks definitively.
HCL
Well played, Hans... Well played.
Brian MacKay