【问题标题】:Minutes to hours in decimal + round in C#十进制的分钟到小时 + C# 中的四舍五入
【发布时间】:2017-07-20 14:40:02
【问题描述】:

我正在尝试将分钟转换为十进制小时数并四舍五入到最接近的十五分钟(四舍五入向上)。

基本上:

15 分钟 = 0.25 小时

25 分钟 = 0.5 小时

30 分钟 = 0.5 小时

50 分钟 = 1 小时

60 分钟 = 1 小时

我在 stackoverflow 上没有找到任何相关内容,但另一个网站告诉我:

var hours =  Math.Round((minutes * 100 ) / 60.0);

这与结果不符。

我知道我不能使用Math.Round()(因为它会将其转换为int?)。 TimeSpan 也一样(因为它在 double 中给出了 .TotalHours)。

从除以 60 开始有什么好的方法?

【问题讨论】:

  • 实际上 50 分钟是 0.75 小时,因为它比 60 更接近 45。
  • 你尝试过 Math.Ceiling(minutes/15)/4 吗?
  • @stybl ,但在我的情况下,我用 15 向上取整。
  • @MarkBenovsky 评论似乎涵盖了你所有的例子
  • Math.Floor 和 Math.Ceiling 将返回整数。既然你想要双倍,我认为你最好的选择是除以 60.0 然后使用一些 if 语句

标签: c# algorithm rounding ceil


【解决方案1】:

假设您有分钟并希望将它们转换为小时 (0.25, 0.5, 0.75, 1)

首先我们知道它是哪个季度:Math.Ceiling(minutes / 15.0)

Math.Ceiling 如果您有 3.01,则返回 4

然后将它除以 4 得到四分之一

var hours = Math.Ceiling(minutes / 15.0)/4.0;

【讨论】:

  • @KahnKah 你不能把值转换成(double)
  • @KahnKah 像这样编辑它var hours = Math.Ceiling(minutes / 15.0)/4.0; 或者将值转换为双倍
  • 我无法将其解析为双重@DarthJam
  • 非常感谢马克
  • 您也可以将15d 用于double15m 用于decimal stackoverflow.com/a/166762/89586
【解决方案2】:

使用其中一种

  • Math.Round(minutes / 15) * 0.25,
  • Math.Floor(minutes / 15) * 0.25
  • Math.Ceiling(minutes / 15) * 0.25

取决于您想要的精确舍入(最近、向下或向上)。

minutes / 15 告诉您四分之一的数量,您将其四舍五入,然后0.25 转换为小时。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-13
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多