当我将双数转换为整数时,我无法理解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)
:的文档
返回值
类型:系统。Int32value
,四舍五入到最接近的32位有符号整数。如果value
在两个整数之间,则返回偶数;也就是说,4.5被转换为4,5.5被转换为6。
根据C#5规范第6.2.1节,显式数字转换:
对于从浮点或双精度到积分型的转换〔…〕
- […]
- 否则,源操作数将向零四舍五入到最接近的整数值。如果这个整数值在目标类型的范围内,那么这个值就是转换的结果
(强调我的。)
所以基本上,Convert.ToInt32
向上或向下四舍五入到最近的int
。施法总是向零取整。