【问题标题】:decimals, ints, casting... oh my!小数,整数,铸造......哦,我的!
【发布时间】:2010-10-18 21:00:59
【问题描述】:

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

【问题讨论】:

  • 编辑后的那位确实应该是一个新问题。
  • 我想可能是这样。我想我只是有那种“论坛”的心态,你会因为发布太多线程或其他什么而被回避。正如你所知道的,我在这里相当新,所以我正在努力按照“这本书”来做所有事情。

标签: c# .net casting integer decimal


【解决方案1】:
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】:
    1. 这是一个很好的链接 casting 直接来自 MSDN。
    2. M 告诉编译器该数字是decimal,否则它将假定它是double

    【讨论】:

    • 感谢您的链接!我为那个 MSDN 网站添加了书签,因为那里有很多有用的信息。
    【解决方案3】:
    1. 当两种类型之间存在精度损失时,通常需要显式转换。例如,如果您有一个 int 并将其分配给 long,则不需要强制转换,因为 long 可以保存 int 可以保存的所有值。但是,如果您将 long 分配给 int,则需要进行强制转换,因为 int 可以保存的值比 long can 少,这可能会导致数据丢失。
    2. M 将数字定义为 Decimal 类型。如果您省略此项,则该数字将被解释为双精度数。

    【讨论】:

    • 好的听起来不错。那么如果我输入一个小数,比如 10.1 作为 int 会发生什么?那会变成10吗?如果是10.9呢?它变成 11 还是仍然是 10?至于将数字定义为小数的 M,还有哪些其他选项?如果我想用谷歌搜索它叫什么?
    • 十进制(和浮点、双精度)转换为 int 始终是删除小数部分的情况,不进行四舍五入。 10.1 和 10.9 都是 10 作为 int。至于字面值,10 是 int,10.0 是 double,10.0F 是 float,10.0M 是小数。不过不知道官方叫什么。
    • 这是一个比我解释得更好的链接:blackwasp.co.uk/CSharpNumericLiterals.aspx
    • 对不起,如果我开始听起来很密集,但是如果您将某些东西声明为浮点数,那么如果您声明为小数,为什么需要添加 F 或 M?如果你可以用一个字母来表示它是什么,为什么要声明它?
    • 不错!我会将此标记为答案。我想我真正需要知道的是文字实际上是什么。使用 F 或 M 只是在运行中强制转换硬编码数字。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-01
    • 1970-01-01
    相关资源
    最近更新 更多