小数,整数,铸造......哦,我的!

时间:2009-04-11 03:28:54

标签: c# .net casting integer decimal

我正在阅读“Head First C#”一书,在其中一章我创建了一个程序并使用声明为整数和小数的变量。 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是什么?

修改

所以M表示数字是小数而不是双数。为什么不直接将数字转换为十进制数:(十进制)50.00?什么是“功能”叫什么?如果我想看看哪些“字母”可用,我会谷歌吗?

3 个答案:

答案 0 :(得分:6)

  1. 当两种类型之间的精度损失时,通常需要显式强制转换。例如,如果你有一个int并将它分配给long,则不需要强制转换,因为long可以保存int可以包含的所有值。但是,如果要为int分配long,则需要进行强制转换,因为int可以保存的值少于long can,这可能会导致数据丢失。
  2. M将数字定义为Decimal类型。如果省略此项,则该数字将被解释为double。

答案 1 :(得分: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则不然。

答案 2 :(得分:2)

  1. 以下是casting直接来自MSDN的良好链接。
  2. M告诉编译器该号码是decimal,否则会认为它是double