decimal l = 50.0M;
我看到其他的答案表明M是明确声明的类型为十进制 - What does the M stand for in C# Decimal literal notation?什么是M后缀的文字小数相关
然而,当类型,变量的,是专说,为什么要有后缀?我可以看到当类型,可变的,不指定,如后缀的相关性:
var l = 50.0M
decimal l = 50.0M;
我看到其他的答案表明M是明确声明的类型为十进制 - What does the M stand for in C# Decimal literal notation?什么是M后缀的文字小数相关
然而,当类型,变量的,是专说,为什么要有后缀?我可以看到当类型,可变的,不指定,如后缀的相关性:
var l = 50.0M
50.0
在C#是文字double
,所以没有M
后缀,你试图隐式转换double
到decimal
(不存在的隐式转换)。
使用decimal l = 50.0M;
说:将该小数点赋值给该十进制变量。
当变量的类型是唯一表示时,为什么应该有后缀?
只有在您分配的值具有小数点的情况下,才需要强制转换。在你的情况下,50.0
代表double
类型的文字。您可以通过添加一个演员,这样
decimal l = (decimal)50.0; // Do not do this!
避免后缀,但是这可能导致转换错误:
decimal d = (decimal)1.23456789123456789;
Console.WriteLine(d); // Prints 1.23456789123457
decimal e = 1.23456789123456789M;
Console.WriteLine(e); // Prints 1.23456789123456789
请注意,以下将编译没有后缀或投,因为int
到decimal
转换从来没有失去精度:
decimal l = 50;
,你可能想M
后缀另一个地方是在表达s表示操控小数:
decimal tenPercentBroken = myDecimal * 0.1; // Does not compile
decimal tenPercentCorrect = myDecimal * 0.1M; // Compiles fine
@CodyGray谢谢你,我提到了l = 50'没有铸造或后缀工作的原因。 – dasblinkenlight
喜见.. here..https://stackoverflow.com/questions/977484/what-does-the-m-stand-for-in-c-sharp-decimal-字面符号 – Wheels73
答案是[在这里](https://stackoverflow.com/a/977514/366904),第二个在你关联的问题上。 –