当我尝试声明这样的变量时:
decimal order = 5.0;
我收到错误消息“double类型的文字不能隐式转换为'decimal'类型;使用'M'后缀来创建此类型的升。”
有人可以解释为什么需要M吗?
答案 0 :(得分:2)
任何带小数点但没有后缀的数字文字都是double
类型。从C#5规范,第2.4.4.3节:
如果未指定 real-type-suffix ,则真实文字的类型为
double
。否则,实际类型后缀确定实际文字的类型,如下所示:[...]
没有从double
到decimal
的隐式转换,因此尝试将double
值分配给decimal
变量失败。
如果你想要float
值,你会得到同样的东西:
float x = 5.0; // Nope, same problem
float
的坏主意。
答案 1 :(得分:0)
如果要将数字实数文字视为十进制,请使用 后缀m或M,例如:
decimal
如果没有后缀m,则将该数字视为double并生成 编译错误。