转换之间的区别是什么.ToInt32和(int)解析



当我将双数转换为整数时,我无法理解Convert.ToInt32和解析(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();
    }
}

(int) i;正在进行强制转换而不是解析。

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

由于一个进行四舍五入,另一个只取整数值,所以可以看到差异。

考虑以下示例:

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

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

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

返回值
类型:系统。Int32
value,四舍五入到最接近的32位有符号整数。如果value在两个整数之间,则返回偶数;也就是说,4.5被转换为4,5.5被转换为6。

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

对于从浮点或双精度到积分型的转换〔…〕

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

(强调我的。)

所以基本上,Convert.ToInt32向上或向下四舍五入到最近的int。施法总是向零取整。