3

我正在阅读“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?那个“功能”叫什么?如果我想看看有哪些“字母”可用,我会用谷歌搜索什么?

4

3 回答 3

6
  1. 当两种类型之间存在精度损失时,通常需要显式转换。例如,如果您有一个 int 并将其分配给 long,则不需要强制转换,因为 long 可以保存 int 可以保存的所有值。但是,如果您将 long 分配给 int,则需要进行强制转换,因为 int 可以保存的值比 long can 少,这可能导致数据丢失。
  2. M 将数字定义为 Decimal 类型。如果您省略它,该数字将被解释为双精度数。
于 2009-04-11T03:32:51.640 回答
4
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

There's a lot of pages that explain C# numeric literals. The letter at the end is not a cast or any kind of function. It is syntax showing that what you are writing represents a value of a particular type. So writing (decimal) 5.0 uses a cast, but writing 5.0m does not.

于 2009-04-11T03:59:35.600 回答
2
  1. 这是直接从 MSDN投射的一个很好的链接。
  2. The M tells the compiler that the number is a decimal, otherwise it will assume it to be a double
于 2009-04-11T03:40:29.563 回答