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),第二個在你關聯的問題上。 –