gpt4 book ai didi

c# - DateTime.AddDays 的准确性如何?

转载 作者:行者123 更新时间:2023-11-30 19:00:55 25 4
gpt4 key购买 nike

由于 DateTime.AddDays() 采用 double 参数,我担心当您添加天数时,可能会出现一些舍入错误。例如,假设我有以下循环:

DateTime Now = DateTime.Today;
for (int i = 0; i < 365; ++i)
{
Now = Now.AddDays(1);
// do something
}

我担心 Now 可能会从午夜开始逐渐消失。我总是很想做这样的事情,它可能会慢一点,但可以减轻我的偏执:

for (int i = 0; i < 365; ++i)
{
Now = Now.AddDays(1.01).Date;
// do something
}

最佳答案

由于 DateTime 在内部将日期存储为 64 位整数,其中一个刻度表示 100 纳秒,因此没有出错的风险。一天有 864,000,000,000 个刻度,Double 的精度至少为 15 位。因此,当四舍五入到滴答时,每个错误都会消失,因为如果 1.0 等于一天,Double 的分辨率高于一次滴答。

这对 AddYears() 来说不是真的,因为如果 1.0 等于一年,Double 没有足够的精度来表示一个刻度。但是如果你看一下 DateTime 类,你会发现设计尊重这个事实 - AddMonths()AddYears() 都有整数和不是浮点参数。

要检查这一点,只需执行以下代码。

DateTime now = DateTime.Now;

// Displays 864000000000
Console.WriteLine(now.AddDays(1.0).Ticks - now.Ticks);

关于c# - DateTime.AddDays 的准确性如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/768975/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com