decimal aValue = 50.0M;
M部分代表什么?
#1 楼
正如其他人所说,这意味着它是一个十进制文字。但是,起源可能不是该答案中其他地方建议的起源。从C#注释的标准(ECMA版本,而不是MS版本)中:decimal
后缀为M / m,因为double
已采用D / d 。 br />尽管有人建议M
代表金钱,但彼得·戈德(Peter Golde)回忆了
,M被简单地选为
decimal
中的下一个最佳字母。
类似的注释提到C#的早期版本分别为
byte
和short
文字包括“ Y”和“ S”。之所以删除它们,是因为它们不经常使用。#2 楼
根据C#规范: var f = 0f; // float
var d = 0d; // double
var m = 0m; // decimal (money)
var u = 0u; // unsigned int
var l = 0l; // long
var ul = 0ul; // unsigned long
请注意,可以使用大写或小写表示法。
#3 楼
M表示“十进制”中的第一个无歧义字符。如果不添加,该数字将被视为双精度数字。D是双精度数字。
评论
我想有一些重要的原因,但是如果您将m放在字面值之外,则会使您感到编译时错误,这使我感到恼火。这并不是模棱两可。
– SeaDrive
09年7月1日在20:25
@JSON对于整数类型可以这样工作,因为那里没有歧义-只要适合类型,它就不会丢失/乱码任何信息。十进制数字也不一样。将双精度值0.42转换为十进制可以为您提供一个不同于0.42M的值(对于使用双精度常量代替浮点常量也是如此-float val = 423.3也会失败)。因此,您需要在微妙的错误行为和需要半秒钟才能解决并符合CLR和C#标准的编译器错误之间进行选择。
–罗安
18-10-18在8:03
“ M”,就像“ deciMal”中的
– Shadi Namrouti
19-09-15在19:06
#4 楼
带M或m后缀的实数文字是小数(货币)类型。例如,文字1m,1.5m,1e10m和123.456M均为十进制类型。通过获取精确值,可将此文字转换为十进制值,并在必要时使用banker的舍入舍入到最接近的可表示值。除非值四舍五入或值为零(在后一种情况下,符号和小数位将为0),否则保留字面上明显的小数位数。因此,将解析文字2.900m以形成带符号0,系数2900和小数位3的小数。了解有关真实文字的更多信息
#5 楼
好吧,我想M代表了尾数。十进制可以用来省钱,但这并不意味着十进制仅用于赚钱。评论
这确实是一种猜测,而且比“第一个可用的非歧义字符”假说的可信度要低得多。如果您有支持的证据,请将其包括在答案中。
–艾舍伍德
19/12/9在22:19
评论
这就留下了一个问题,为什么E / e不是次佳的字母。
–VVS
09年6月10日在19:14
“ e”会存在问题,因为它已经在文字中使用了。例如,“ 2e4m”是有效文字(十进制20000)。即使它是明确的(而且很可能是这样,尽管“ 1e”最终会出现一个奇怪的编译器错误消息,表明它不在可行的双精度范围内,并不是说它在语法上无效;我怀疑那是个错误),它仍然会令人困惑。 “ c”可能会有意义而不会引起任何混乱,尽管毫无疑问,它会向人们暗示“货币” :)
–乔恩·斯基特(Jon Skeet)
09年6月10日在19:28
“ c”与VB.Net中的字符串的字符文字冲突,尽管语法甚至有所不同。
–乔尔·科恩(Joel Coehoorn)
09年6月10日在19:39
对于C#和VB中的不同,我不会有太多问题。 VB已经具有不同的十六进制语法,例如IIRC。
–乔恩·斯基特(Jon Skeet)
2009年6月10日19:40
如果对“小数”的音节进行布局,则会得到“ De Ci Mal”。这些是最有意义的用法。 D已经被占用,C可能是字符,M似乎是一个合理的选择。
–亚伦·弗兰克(Aaron Franke)
18年2月28日在9:57