decimal l = 50.0M;
我看到其他答案建议 M 表示显式声明类型为十进制 - C# 中 Decimal 字面量符号 M 的含义是什么?
然而,当变量的类型被明确指定时,为什么还需要后缀呢?我可以理解当变量的类型没有指定时后缀的相关性,像这样:
var l = 50.0M
decimal l = 50.0M;
我看到其他答案建议 M 表示显式声明类型为十进制 - C# 中 Decimal 字面量符号 M 的含义是什么?
然而,当变量的类型被明确指定时,为什么还需要后缀呢?我可以理解当变量的类型没有指定时后缀的相关性,像这样:
var l = 50.0M
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
后缀:
decimal tenPercentBroken = myDecimal * 0.1; // Does not compile
decimal tenPercentCorrect = myDecimal * 0.1M; // Compiles fine
l=50
能够不需要强制转换或后缀的原因。 - Sergey Kalinichenko50.0
在C#中是一个字面量的double
,所以如果没有M
后缀,你正在尝试将double
隐式转换为decimal
(一种不存在的隐式转换)。
使用decimal l = 50.0M;
表示:将这个十进制数赋给那个十进制变量。