【问题标题】:Casting double to int different result using (int) and Convert.ToInt(32)使用 (int) 和 Convert.ToInt(32) 将 double 转换为 int 不同的结果
【发布时间】:2015-05-30 16:52:09
【问题描述】:

如果我没记错的话,当你使用

(整数)

这与转换为 Int32 相同

Convert.ToInt32(值)

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

 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。为什么会出现这种行为?

例如阅读这篇文章:

difference between Convert.ToInt32 and (int)

我知道应该是一样的。

【问题讨论】:

  • 您是否在不同的时间进行了检查?
  • 我猜默认的舍入逻辑是庄家舍入。一楼一牢。
  • @SérgioS.Filho 默认的舍入逻辑是什么?
  • 铸造但我不确定@Jodrell
  • @SérgioS.Filho 用于铸造(例如(int)0.5)它的刚刚地板,任何小数部分都被丢弃。

标签: c# int


【解决方案1】:

您会看到差异,因为实际数字是 29.5 或更高。强制转换会截断值,而 Convert 执行舍入:

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

打印出来

Cast: 29 Convert: 30

Demo.

【讨论】:

【解决方案2】:

看起来它与您使用 Convert.toInt32 时包含 /365 相关,但在另一个中却没有。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 2011-05-10
    • 1970-01-01
    • 2019-10-04
    • 2017-07-07
    • 1970-01-01
    相关资源
    最近更新 更多