Convert.ToInt32和(int)Parsing有什么区别

时间:2016-04-05 19:49:07

标签: c# console int double

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

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();
    }
}

2 个答案:

答案 0 :(得分:4)

(int) i;正在进行解析。

Convert.ToInt32(double)会将数字四舍五入到最接近的32位整数。而(int) i;只会获取double值的整数部分,并将其赋值给变量。

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

考虑以下示例:

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

在上面的代码中,强制转换返回1,因为它是double值的整数部分,而使用Convert.ToInt32的转换舍入了值。

答案 1 :(得分:3)

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

  

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

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

  

从float或double转换为整数类型[...]

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

(强调我的。)

基本上,Convert.ToInt32向上或向下舍入到最近的int。施法总是向零舍入。

相关问题