【发布时间】:2012-07-06 14:46:13
【问题描述】:
我一直在寻找一种合适的舍入机制,但我发现的似乎都不是我所需要的。
我需要分别向上和向下舍入,并且我还需要考虑已经四舍五入的情况。
我需要进行以下舍入
5:00 -> RoundDown() -> 5:00
5:04 -> RoundDown() -> 5:00
5:09 -> RoundDown() -> 5:00
5:10 -> RoundDown() -> 5:10
4:00 -> RoundUp() -> 4:00
4:50 -> RoundUp() -> 4:50
4:51 -> RoundUp() -> 5:00
4:56 -> RoundUp() -> 5:00
基本上,我需要将 RoundUp() 或 RoundDown() 明确地精确到最近的 10 分钟,但如果时间已经是 10 分钟的倍数,它也应该保持不变。另外我想截断任何秒,以使其对舍入过程没有影响
4:50:45 -> 4:50:00 -> RoundUp() -> 4:50
有没有人有任何方便的代码来完成这个。
我在某处找到了这段代码,但它舍入 5:00 -> RoundUp() -> 5:10 而不是保持原样,因为它已经是 10 的倍数并且不需要舍入。我也不确定秒会如何影响它
public static DateTime RoundDateTime(this DateTime dt, int minutes, RoundingDirection direction)
{
TimeSpan t;
switch (direction)
{
case RoundingDirection.Up:
t = (dt.Subtract(DateTime.MinValue)).Add(new TimeSpan(0, minutes, 0)); break;
case RoundingDirection.Down:
t = (dt.Subtract(DateTime.MinValue)); break;
default:
t = (dt.Subtract(DateTime.MinValue)).Add(new TimeSpan(0, minutes / 2, 0)); break;
}
return DateTime.MinValue.Add(new TimeSpan(0,
(((int)t.TotalMinutes) / minutes) * minutes, 0));
}
希望有人可以编辑该方法以使其适合我。谢谢
【问题讨论】:
-
好的。所以你有四舍五入的代码。您为什么不对其进行修改以使其完成您需要做的事情?
-
您的舍入规则不清楚。你从 5:09 到 5:00,但从 4:56 到 5:00。
-
@Rawling:嗯.. 因为 5:09 被向下取整,4:56 被向上取整??
-
@mellam 天哪,我完全误读了这个问题。这没东西看! (无论如何我选择了错误的例子,我的意思是 4:51 到 5:00。)