【问题标题】:Round off dateTimePicker value舍入 dateTimePicker 值
【发布时间】:2023-03-17 20:48:02
【问题描述】:

我正在计算dateTimePicker2dateTimePicker1 之间的差异并将其转换为分钟,

durinmin = Convert.ToInt32((dateTimePicker2.Value - dateTimePicker1.Value).TotalMinutes);

问题是,例如,如果差值为“00:17:40”,durinmin = 18。但我想只保留已完成分钟的值,即durinmin=17 是我希望我的程序考虑的值。如何获得?

【问题讨论】:

  • 我没想到会有这种行为。请发布一个简短但完整的示例 - 注意 DateTimePicker.Value 只返回一个 DateTime,因此您可以轻松编写一个 使用 DateTimePickerminimal reproducible example,并且只是硬编码两个DateTime 值。 (控制台应用程序是很好的简短示例...)
  • 请参考这个类似的帖子:stackoverflow.com/questions/1393696/rounding-datetime-objects问候。
  • 有趣的近距离投票:离题,与编程无关。诶……?

标签: c# datetimepicker datetime-format


【解决方案1】:

话虽如此,我不会期待这种行为,但我刚刚注意到 Convert.ToInt32 是舍入而不是截断 - 所以它的行为完全符合预期。 TotalMinutes 属性返回 17.6666(等),四舍五入为 18。

您需要做的就是使用转换而不是方法 - 转换为 int 将截断为 0:

TimeSpan difference = dateTimePicker2.Value - dateTimePicker1.Value;
int minutes = (int) difference.TotalMinutes;

【讨论】:

    【解决方案2】:

    只需使用Math.Floor

    durinmin = (int)Math.Floor((dateTimePicker2.Value - dateTimePicker1.Value).TotalMinutes);
    

    【讨论】:

    • 您不需要使用Math.Floor - 只需转换即可。这里的一个区别是,如果持续时间为 ,这将向下舍入而不是向 0 舍入。在这种情况下 OP 想要什么并不完全清楚...
    • 在这种情况下不可能得到负持续时间。因为,durinmin =(停止时间 - 开始时间)。不过很高兴有您的宝贵建议。
    • 乔恩的回答可能比上面的评论更好
    【解决方案3】:

    不要使用 TotalMinutes,而是使用 TimeSpan 的 Minutes 属性:

    durinmin = Convert.ToInt32((dateTimePicker2.Value - dateTimePicker1.Value).Minutes);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多