使用 (int) 和 Convert.ToInt(32) 将 double 转换为 int 不同的结果
Casting double to int different result using (int) and Convert.ToInt(32)
如果我没记错的话,当你使用
(int)
这与转换为 Int32 相同
Convert.ToInt32(value)
我是运行一个方法,代码如下:
public int CurrentAge()
{
// return Convert.ToInt32((DateTime.Now - BirthDay).TotalDays)/365;
return (int)((DateTime.Now - BirthDay).TotalDays)/365;
}
使用这个日期:
DateTime.ParseExact("13-07-1985", "dd-MM-yyyy",null)
并取消注释第一行,输出为 30
,但使用 (int) 进行转换会导致 29
。为什么会出现这种行为?
读这个 post 例如:
difference between Convert.ToInt32 and (int)
我理解应该是一样的
看起来这与您使用 Convert.toInt32 时包含 /365 但在另一个中不包含有关。
你看到了差异,因为实际数字是 29.5 或以上。转换截断值,而 Convert
执行舍入:
double x = 29.5;
Console.WriteLine("Cast: {0} Convert: {1}", (int)x, Convert.ToInt32(x));
这会打印
Cast: 29 Convert: 30
如果我没记错的话,当你使用
(int)
这与转换为 Int32 相同
Convert.ToInt32(value)
我是运行一个方法,代码如下:
public int CurrentAge()
{
// return Convert.ToInt32((DateTime.Now - BirthDay).TotalDays)/365;
return (int)((DateTime.Now - BirthDay).TotalDays)/365;
}
使用这个日期:
DateTime.ParseExact("13-07-1985", "dd-MM-yyyy",null)
并取消注释第一行,输出为 30
,但使用 (int) 进行转换会导致 29
。为什么会出现这种行为?
读这个 post 例如:
difference between Convert.ToInt32 and (int)
我理解应该是一样的
看起来这与您使用 Convert.toInt32 时包含 /365 但在另一个中不包含有关。
你看到了差异,因为实际数字是 29.5 或以上。转换截断值,而 Convert
执行舍入:
double x = 29.5;
Console.WriteLine("Cast: {0} Convert: {1}", (int)x, Convert.ToInt32(x));
这会打印
Cast: 29 Convert: 30