2017-06-14 19 views
2
decimal l = 50.0M; 

我看到其他的答案表明M是明確聲明的類型爲十進制 - What does the M stand for in C# Decimal literal notation?什麼是M後綴的文字小數相關

然而,當類型,變量的,是專說,爲什麼要有後綴?我可以看到當類型,可變的,不指定,如後綴的相關性:

var l = 50.0M 
+0

喜見.. here..https://stackoverflow.com/questions/977484/what-does-the-m-stand-for-in-c-sharp-decimal-字面符號 – Wheels73

+0

答案是[在這裏](https://stackoverflow.com/a/977514/366904),第二個在你關聯的問題上。 –

回答

1

50.0在C#是文字double,所以沒有M後綴,你試圖隱式轉換doubledecimal(不存在的隱式轉換)。

使用decimal l = 50.0M;說:將該小數點賦值給該十進制變量。

1

我相信原因是因爲在賦值語句中首先評估右側。

右側的值分配給左側的變量。所以右側必須首先評估,然後看左側,如果類型不同,則必須進行強制轉換。

+0

聽起來很合理! – Sumith

1

當變量的類型是唯一表示時,爲什麼應該有後綴?

只有在您分配的值具有小數點的情況下,才需要強制轉換。在你的情況下,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 

請注意,以下將編譯沒有後綴或投,因爲intdecimal轉換從來沒有失去精度:

decimal l = 50; 

,你可能想M後綴另一個地方是在表達s表示操控小數:

decimal tenPercentBroken = myDecimal * 0.1; // Does not compile 
decimal tenPercentCorrect = myDecimal * 0.1M; // Compiles fine 
+0

@CodyGray謝謝你,我提到了l = 50'沒有鑄造或後綴工作的原因。 – dasblinkenlight