十进制类型的声明后缀

132

如果我想在代码中使用十进制字面量,我看到存在m后缀(其中m代表货币)。这适用于任何小数吗?还是有更通用的赋值方式(d代表double,那肯定不是正确的事情,尽管支持直接转换)。

object decimalValue=2m;
请注意,我以对象赋值作为示例,因为在可以省略括号的情况下,只有当变量是对象时才需要使用括号来避免语法错误。
decimal decimalValue=2;

从编译器的隐晦表述来看,2应该被解释为十进制.

m看起来没问题,msdn将其作为decimal类型的示例使用。


1
M 可以代表金钱,但它也可能只是单词“decimal”中下一个可用的字母,因为 D 用于 double,而 E 则用作指数符号,例如 '1E06'。 - Caltor
3个回答

281

参考C#语言规范第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类型不支持任何操作。


虽然不是后缀,但我们也可以使用单引号来声明一个字符,例如 char c = 'a' - Kevin Hogg
您还可以参考这份更加用户友好的文档:https://learn.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/value-types-table - Douglas Gaskell

23

如果数值实字面量没有后缀,它将默认为Double类型。而加上m后缀则表示数值实字面量应该是Decimal类型。

这一点很重要,因为对浮点数(如Double)进行算术运算是不精确的。例如:

object decimalValue=(5.32 + 2.23);

在这里,decimalValue实际上会包含一个Double类型的值,其意外的值为7.5500000000000007!如果我想要7.55,我可以这样做:

object decimalValue=(5.32m + 2.23m);
回答你关于是否有更通用的后缀的问题,m是在C#中Decimal类型的唯一后缀。它可能代表金钱,就像你提到的那样,但是他们必须使用与double不同的字符,因为d已经被double使用了!
进一步阅读:decimal (C# Reference)

1
谢谢,我已经看到并将 msdn 链接放入我的问题中,就像您回答时输入的那样。然而,我接受了 Hans Passant 的帖子,因为有一个不错的列表,对那些因后缀而来此帖的人们会有很大帮助。但是还是非常感谢您。 - HCL

1

在C#中声明十进制的简短回答为Declare Decimal in C#

decimal firstMoney = 141.28m;

输出:141.28

decimal secondMoney = 100.00m;

输出: 100

更多参考请查看MSDN

希望能对某些人有所帮助。


@Thomas,我理解你的意思,但我只是试图为那些正在寻找声明十进制的人提供简短的答案,我应该删除这篇帖子吗?你认为它没有用吗? - Shaiju T
3
我认为这并没有什么用,但是我远非完美,它可能会帮助他人。如果你在第二遍阅读中发现它没有用,那么你可以删除它。如果你认为它对某人有帮助,就保持原样吧 :) - Thomas Ayoub
2
@ThomasAyoub 个人认为,我不明白这篇回答有什么额外的内容,因为 Hans 的回答 已经涵盖了它。 - user692942
可以使用变量来实现这个吗?例如:变量M,而不是1.25M。 - I try so hard but I cry harder
@ItrysohardbutIcryharder 如果variableM中有小数值,它应该可以工作。 - Shaiju T

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接