使用 (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

Demo.