使用(int)和Convert.ToInt(32)将double转换为int不同的结果

Car*_*ras 1 c# int

如果我没有错,当你使用时

(INT)

它与转换为Int32相同

Convert.ToInt32(值)

我正在使用以下代码运行方法:

 public int CurrentAge()
 {
      // return Convert.ToInt32((DateTime.Now - BirthDay).TotalDays)/365;
      return (int)((DateTime.Now - BirthDay).TotalDays)/365;
 }
Run Code Online (Sandbox Code Playgroud)

使用此日期:

  DateTime.ParseExact("13-07-1985", "dd-MM-yyyy",null)
Run Code Online (Sandbox Code Playgroud)

并取消注释第一行,输出是30,但使用(int)转换导致29.为什么会这样?

阅读这篇文章例如:

Convert.ToInt32和(int)之间的区别

我明白它应该是一样的.

das*_*ght 5

您会看到差异,因为实际数字是29.5或更高.Casting截断值,同时Convert执行舍入:

double x = 29.5;
Console.WriteLine("Cast: {0} Convert: {1}", (int)x, Convert.ToInt32(x));
Run Code Online (Sandbox Code Playgroud)

这打印

Cast: 29 Convert: 30
Run Code Online (Sandbox Code Playgroud)

演示.