【问题标题】:What is the difference between Convert.ToInt32 and (int) Parsing [duplicate]Convert.ToInt32 和 (int) Parsing 有什么区别[重复]
【发布时间】:2016-07-25 22:44:21
【问题描述】:

当我将双数转换为整数时,我无法理解 Convert.ToInt32 和 Parsing (int) 命令之间的区别。我的示例代码在这里,当我显示它时我有两个不同的答案。

class Program
{
    static void Main(string[] args)
    {
        double i = 3.897456465;
        int y;
        y = Convert.ToInt32(i);
        Console.WriteLine(y);
        y = (int)i;
        Console.WriteLine(y);
        Console.ReadKey();
    }
}

【问题讨论】:

  • 那么您得到的答案是什么?当您查看文档时,它向您展示了什么?
  • 当我使用 Convert.ToInt32 时得到“4”,当我使用解析时得到“3”。
  • 一些阅读。不使用双打,但解释了幕后发生的事情stackoverflow.com/questions/199470/…

标签: c# console int double


【解决方案1】:

(int) i; 是强制转换而不是解析。

Convert.ToInt32(double) 会将数字四舍五入为最接近的 32 位整数。而强制转换(int) i; 只会获取双精度值的整数部分并将其分配给变量。

由于一个进行舍入,另一个只取整数值,因此您会看到差异。

考虑以下示例:

double d = 1.99d;
int castedValue = (int) d; //1
int convertedValue = Convert.ToInt32(d); //2

在上面的代码中,转换返回1,因为这是双精度值的整数部分,而使用Convert.ToInt32 的转换将值四舍五入。

【讨论】:

    【解决方案2】:

    来自Convert.ToInt32(double)的文档:

    返回值
    类型:System.Int32
    value,四舍五入到最接近的 32 位有符号整数。如果value在两个整数的中间,则返回偶数;即4.5转4,5.5转6。

    根据 C# 5 规范第 6.2.1 节,显式数字转换:

    对于从 float 或 double 到整数类型的转换 [...]

    • [...]
    • 否则,源操作数向零舍入到最接近的整数值。如果这个整数值在目标类型的范围内,那么这个值就是转换的结果。

    (强调我的。)

    所以基本上,Convert.ToInt32 向上或向下舍入到最接近的 int。投射总是向零舍入。

    【讨论】:

      猜你喜欢
      • 2010-12-09
      • 2013-03-31
      • 2013-02-02
      • 2015-01-29
      • 2021-05-04
      • 1970-01-01
      • 2012-04-12
      • 2011-03-28
      相关资源
      最近更新 更多