为什么在声明小数的时候要用M呢?

本文关键字:声明 小数 为什么 | 更新日期: 2023-09-27 18:04:00

当我尝试这样声明变量时:

decimal order = 5.0;

我得到错误消息" double类型的文字不能隐式转换为'decimal'类型;使用"M"后缀来创建这种类型的升。"

谁能解释一下为什么需要M ?

为什么在声明小数的时候要用M呢?

类型为double的任何带有小数点但没有后缀的数字字面值。来自c# 5规范,第2.4.4.3节:

如果不指定real-type-suffix,则实字面值的类型为double。否则,实类型后缀决定实文字的类型,如下所示:[…]

没有从doubledecimal的隐式转换,因此尝试将double值赋给decimal变量失败。

如果你想要一个float值,你会得到同样的东西:

float x = 5.0; // Nope, same problem

可以显式地转换为floatdecimal,但这对于float来说是一个坏主意,而对于decimal来说,非常坏主意。

MSDN:decimal c# reference

如果您希望将数字实字面值视为小数,请使用后缀m或m,例如:

decimal myMoney = 300.5m;

如果没有后缀m,则将该数字视为双精度数并生成编译错误。