M代表C#十进制文字符号的含义是什么?

cos*_*son 282 c# decimal literals

为了使用十进制数据类型,我必须使用变量初始化来执行此操作:

decimal aValue = 50.0M;
Run Code Online (Sandbox Code Playgroud)

M部分代表什么?

Jon*_*eet 358

这意味着它是一个十进制字面,正如其他人所说的那样.然而,起源可能不是这个答案中其他地方所建议的.来自C#Annotated Standard(ECMA版本,而不是MS版本):

decimal后缀是M /米因为d/d已经采取double.尽管有人建议M代表金钱,但彼得戈尔德回忆说,M被选为下一个最好的字母decimal.

类似的注释提到C#的早期版本分别包括"Y"和"S" byteshort文字.他们因不经常使用而被丢弃.

  • "e"会有问题,因为它已经用在文字中.例如,"2e4m"是有效的文字(十进制20000).即使它是明确的(并且很可能是,虽然"1e"最终会出现一个奇怪的编译器错误消息,表明它超出了可行的双精度范围,而不是它在语法上无效;我怀疑这是一个错误)它仍然是混乱."c"可能有意义而不会引起任何混淆,尽管毫无疑问它会向人们提出"货币":) (58认同)
  • 如果你列出"十进制"的音节,你会得到"De Ci Mal".这些使用最有意义.D已经被采用,C可能是字符,M似乎是一个合乎逻辑的选择. (9认同)
  • "c"与VB.Net中字符串的字符文字冲突,尽管语法有点不同. (7认同)
  • 这就留下了为什么E/e不是下一个最好的字母的问题. (6认同)
  • 在C#和VB中它不同,我不会有太多问题.VB已经有不同的十六进制语法,例如IIRC. (3认同)
  • 真实文字的类型由其后缀决定。不带后缀或带 d 或 D 后缀的文字的类型为 double。带有 f 或 F 后缀的文字是 float 类型。带有 m 或 M 后缀的文字是十进制类型。https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/floating-point-numeric-types#real-literals (2认同)

MDS*_*ens 14

M表示十进制.如果您不添加它,则该数字将被视为双精度数.D是双倍的.

  • "M",就像"十进制":) (31认同)
  • 我想有一些重要的原因,但是如果你把m从文字中删除,那么你会因为编译时出错而烦恼我.这不像是模棱两可的. (4认同)
  • @JSON 对于整数类型来说,它是这样工作的,因为那里没有歧义 - 只要它适合该类型,它就不会丢失/乱码任何信息。对于十进制数则不然。将双精度值“0.42”转换为十进制可以得到与“0.42M”不同的值(使用双精度文字代替浮点文字也是如此 -“float val = 423.3”也会失败)。因此,您需要在轻微错误的行为和需要半秒修复并符合 CLR 和 C# 标准的编译器错误之间进行选择。 (4认同)
  • “M”,如“decimal” (3认同)

Sha*_*uti 13

从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
Run Code Online (Sandbox Code Playgroud)

请注意,您可以使用大写或小写表示法。


Luc*_*ain 5

以 M 或 m 为后缀的实数是decimal (money)类型。例如,文字 1m、1.5m、1e10m 和 123.456M 都是十进制类型。该文字通过取精确值转换为十进制值,并在必要时使用银行家舍入法四舍五入到最接近的可表示值。除非值被四舍五入或值为零(在后一种情况下,符号和比例将为 0),否则会保留文字中明显的任何比例。因此,文字 2.900m 将被解析为带符号 0、系数 2900 和比例 3 的小数。

阅读有关真实文字的更多信息