当我将双数转换为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();
}
}
答案 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
。施法总是向零舍入。