【发布时间】:2016-10-16 16:48:14
【问题描述】:
我有一个 Windows FILETIME:
一个 64 位值,表示 100 纳秒间隔的数量 自 1601 年 1 月 1 日 (UTC))
我需要将它向上舍入到最接近的偶数秒,如 here 所述。
我目前的代码:
var originalDt = DateTime.FromFileTimeUtc(input);
// round it UP to the nearest Second
var newDt = originalDt.AddMilliseconds(1000 - originalDt.Millisecond);
// then if our new Second isn't even
if (newDt.Second % 2 != 0)
{
// add one second to it, then it'll be even
newDt = newDt.AddSeconds(1);
}
return newDt.ToFileTimeUtc();
不太好用...它将 130790247821478763 变成 130790247820008763,我在 130790247800000000 之后。
数学不是我最擅长的科目...我可以安全地将最后四位数字归零吗?还是我应该忘记上面的代码,只将最后八位数字完全归零?或者……另一种方式?
【问题讨论】:
-
你用
value = N * (value / N + N-1)四舍五入到N的倍数