2009-04-11 46 views
3

我正在閱讀「Head First C#」書,並在其中一章中創建了一個程序,並使用聲明爲int和小數的變量。 Visual Studio與我混淆了幾次混淆和匹配兩者。例如:小數,整數,鑄造...哦,我的!

dinnerParty.NumberOfPeople = (int) numericUpDown1.Value; 

NumberOfPeople被聲明爲int,顯然數字updowns是小數。

此外,本書將一些數字加在一起後加上M。例如:

public void SetHealthyOption(bool healthy) 
{ 
    if (healthy) 
    { 
     CostOfBeveragesPerPerson = 5.00M; 
    } 
    else 
    { 
     CostOfBeveragesPerPerson = 20.00M; 
    } 
} 

CostOfBeveragesPerPerson被聲明爲小數。

所以我有兩個具體的問題:

1)你怎麼能知道你什麼時候需要轉換的東西嗎?我敢肯定有很多東西可以鑄造......任何人都可以提供一些很好的鏈接來了解鑄造嗎?

2)數字後的M是什麼?

EDIT

所以M表示該數字是十進制而不是雙。爲什麼不把數字轉換成小數點,如:(小數點)50.00?那叫什麼「功能」?如果我想看看有什麼「字母」可用,Google會怎麼樣?

+0

編輯後的位應該是一個新問題。 – RossFabricant 2009-04-11 03:57:18

+0

我想它可能是。我想我只是因爲張貼太多的線程或其他東西而被拒絕的「論壇」心態。正如你可以告訴我在這裏相當新,所以我試圖通過「書」來做所有事情。 – Pete 2009-04-11 05:31:21

回答

6
  1. 當兩種類型之間的精度損失時,通常需要顯式強制轉換。例如,如果您有一個int並將其分配給long,則不需要強制轉換,因爲long可以保存int可以存儲的所有值。但是,如果您將一個long分配給一個int,則需要進行強制轉換,因爲int可以保存的值比long can少,這可能會導致數據丟失。
  2. M將數字定義爲十進制類型。如果你忽略這個,該數字被解釋爲雙精度。
+0

好聽起來不錯。那麼如果我輸入一個小數,比如說10.1是一個int,會發生什麼?那麼它會變成10嗎?如果它是10.9呢?它是11還是10還? 只要M將數字定義爲小數,還有什麼其他選項?如果我想要Google它,那叫什麼? – Pete 2009-04-11 03:39:25

2
  1. 這裏是直接從MSDN上casting一個很好的鏈接。
  2. 在M告訴編譯器的數量是decimal,否則會認爲它是一個double
3
Type Suffix   Example 
uint U or u   100U 
long L or l   100L 
ulong UL or ul  100UL 
float F or f   123.45F 
decimal M or m   123.45M 

有很多的,在年底解釋C# numeric literals.信頁面是不是投或任何類型的功能。它是語法,表明您正在編寫的內容代表特定類型的值。所以寫(十進制)5.0使用強制轉換,但寫入5.0m不行。