Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#十进制文字记数法中,M代表什么?_C#_Decimal_Literals - Fatal编程技术网

在C#十进制文字记数法中,M代表什么?

在C#十进制文字记数法中,M代表什么?,c#,decimal,literals,C#,Decimal,Literals,为了使用十进制数据类型,我必须使用变量初始化: decimal aValue = 50.0M; M部分代表什么?M表示“十进制”中的第一个非歧义字符。如果不加,则该数字将被视为双精度 D是双精度的。正如其他人所说,这意味着它是一个十进制文字。然而,这些起源可能不是这个答案中其他地方提到的。从(ECMA版本,而非MS版本): 自D/D起,decimal后缀为M/M 已被double捕获。 尽管有人建议M 彼得·戈尔德回忆说,代表金钱 M只是被选为下一个 十进制中的最佳字母 一个类似的注释提到,早

为了使用十进制数据类型,我必须使用变量初始化:

decimal aValue = 50.0M;

M部分代表什么?

M表示“十进制”中的第一个非歧义字符。如果不加,则该数字将被视为双精度


D是双精度的。

正如其他人所说,这意味着它是一个十进制文字。然而,这些起源可能不是这个答案中其他地方提到的。从(ECMA版本,而非MS版本):

自D/D起,
decimal
后缀为M/M 已被
double
捕获。 尽管有人建议M 彼得·戈尔德回忆说,代表金钱 M只是被选为下一个
十进制中的最佳字母


一个类似的注释提到,早期版本的C#包括分别表示
字节
文字的“Y”和“S”。它们之所以被删除,是因为它们不太常用。

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

来自C#规范:

var f=0f;//浮动
变量d=0d;//双重的
var m=0m;//十进制(货币)
变量u=0u;//无符号整型
变量l=0l;//长的
var ul=0ul;//无符号长

请注意,您可以使用大写或小写符号。

嗯,我想M代表尾数。小数可以用来省钱,但这并不意味着小数只用于钱

这就留下了一个问题,为什么E/E不是下一个最好的字母。“E”会有问题,因为它已经在文字中使用了。例如,“2e4m”是一个有效的文本(十进制20000)。即使它是明确的(很可能是,尽管“1e”最终会出现一条奇怪的编译器错误消息,表明它超出了可行的双精度范围,而不是说它在语法上无效;我怀疑这是一个bug),它仍然会令人困惑。“c”可能是有意义的,不会引起任何混淆,尽管它无疑会向人们暗示“货币:)“c”与VB.Net中字符串的字符文字冲突,尽管语法有点不同。我不会有太多问题,因为它在c#和VB中是不同的。VB已经有了不同的十六进制语法,例如IIRC。如果你把“Decimal”的音节排好,你会得到“Decimal”。这些是最有意义的使用。D已经被取了,C可以是字符,M似乎是一个合乎逻辑的选择。我想这是有一些重要原因的,但是如果你把M从文本中去掉,就会出现编译时错误,这让我很恼火。它不像是不明确的。@JSON它对整数类型是这样工作的,因为那里没有不明确的地方-只要它适合该类型,它就不会丢失/篡改任何信息。十进制数的情况并非如此。将双精度值
0.42
强制转换为十进制可以得到与
0.42M
不同的值(使用双精度文本代替浮点文本时也是如此-
float val=423.3
)。因此,你要在一个微妙的错误行为和一个编译器错误之间做出选择,这个错误需要半秒钟的时间来修复,并且符合CLR和C#标准。“M”,就像“deciMal”中的“deciMal”,这确实是一个猜测,它远不如“第一个可用的非歧义字符”假设可信。如果你有支持的证据,在你的回答中包括它。