2009-04-11 84 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不行。