Kel*_*tex 2 c# datetime rounding
由于DateTime.AddDays()接受一个double参数,我担心当你添加一天时,可能会有一些舍入错误.例如,假设我有以下循环:
DateTime Now = DateTime.Today;
for (int i = 0; i < 365; ++i)
{
Now = Now.AddDays(1);
// do something
}
Run Code Online (Sandbox Code Playgroud)
我担心现在可能会从午夜开始漂流.我总是想做一些这样的事情,这可能会慢一些,但我的偏执有些缓解:
for (int i = 0; i < 365; ++i)
{
Now = Now.AddDays(1.01).Date;
// do something
}
Run Code Online (Sandbox Code Playgroud)
Dan*_*ner 11
由于DateTime将日期内部存储为64位整数,其中一个刻度表示100纳秒,因此不存在错误风险.一天有864,000,000,000个刻度,Double精度至少为15位.因此,当舍入到滴答时,每个错误都会消失,因为Double如果1.0等于一天,则分辨率高于一个滴答.
这不是真的AddYears(),因为Double如果1.0等于一年,则没有足够的精度来表示一个刻度.但是如果你看一下这个DateTime类,你会发现设计遵循这个事实 - AddMonths()并且AddYears()同时具有整数和非浮点参数.
要检查这一点,只需执行以下代码即可.
DateTime now = DateTime.Now;
// Displays 864000000000
Console.WriteLine(now.AddDays(1.0).Ticks - now.Ticks);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4052 次 |
| 最近记录: |