【发布时间】:2010-11-01 22:12:56
【问题描述】:
为了使用十进制数据类型,我必须通过变量初始化来做到这一点:
decimal aValue = 50.0M;
M 部分代表什么?
【问题讨论】:
为了使用十进制数据类型,我必须通过变量初始化来做到这一点:
decimal aValue = 50.0M;
M 部分代表什么?
【问题讨论】:
以 M 或 m 为后缀的实数文字是 decimal (money) 类型。例如,文字 1m、1.5m、1e10m 和 123.456M 都是十进制类型。该文字通过取确切值转换为十进制值,并在必要时使用银行四舍五入四舍五入到最接近的可表示值。除非值被四舍五入或值为零(在后一种情况下,符号和比例将为 0),否则文字中明显的任何比例都会被保留。因此,文字 2.900m 将被解析为符号 0、系数 2900 和小数位数 3 的小数。
【讨论】:
M 指“十进制”中的第一个非歧义字符。如果您不添加它,则该数字将被视为双精度数。
D 是双倍的。
【讨论】:
0.42 转换为十进制可以为您提供与 0.42M 不同的值(使用双精度文本代替浮点文本也是如此 - float val = 423.3 也会失败)。因此,您要在一个微妙的错误行为和一个需要半秒钟才能修复并符合 CLR 和 C# 标准的编译器错误之间进行选择。
来自 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
请注意,您可以使用大写或小写符号。
【讨论】:
嗯,我猜 M 代表尾数。小数可以用来省钱,但不代表小数只用来存钱。
【讨论】:
正如其他人所说,这意味着它是十进制文字。但是,起源可能不是此答案中其他地方建议的起源。来自C# Annotated Standard(ECMA 版本,不是 MS 版本):
decimal后缀是 M/m,因为 D/d 已被double拍摄。 虽然有人建议 M 代表金钱,彼得·戈尔德回忆说 M 被简单地选为下一个decimal中的最佳字母。
一个类似的注释提到 C# 的早期版本分别包含 byte 和 short 文字的“Y”和“S”。它们因不经常使用而被丢弃。
【讨论】: