C# 时间跨度错误。。?
相同TIKC量的TimeSpan如何给出不同的TotalDays值?下面是我运行应用程序后在Debugger上看到的内容C# 时间跨度错误。。?,c#,.net,visual-studio-2010,.net-3.5,timespan,C#,.net,Visual Studio 2010,.net 3.5,Timespan,相同TIKC量的TimeSpan如何给出不同的TotalDays值?下面是我运行应用程序后在Debugger上看到的内容 Ticks: 25920000000000 TotalDays: 30.0 当我在同一位置点击断点时,再点击几下,值如下所示: Ticks: 25920000000000 TotalDays: 29.999999999999996 因为我后来使用了总天数值,所以我突然想到,对于“相同”的时间跨度,一次是30,另一次是29 这仅在.NET 3.5框架配置的“AnyCpu
Ticks: 25920000000000
TotalDays: 30.0
当我在同一位置点击断点时,再点击几下,值如下所示:
Ticks: 25920000000000
TotalDays: 29.999999999999996
因为我后来使用了总天数值,所以我突然想到,对于“相同”的时间跨度,一次是30,另一次是29
这仅在.NET 3.5框架配置的“AnyCpu”上的我的Corei7(win7 x64)工作站上出现(在x86上总是30,在其他3个工作站上也不会出现29)。有什么想法吗 好吧,它是一个双精度值(因此当您获得TotalDays
值时,会将long
-Ticks
-转换为double
),因此可能会出现浮点精度“问题”
如果需要整数,请使用TimeSpan.Days
TotalDays
是一个只读属性,它使
return (double) this._ticks * (0.0 / 1.0);
(其中,\u ticks
为长)
Days
也是一个只读项目:
return (int) (this._ticks / 864000000000L);
TimeSpan.Days
但是,正如您所说,只会给出整数天数。。。在OP的版本中,第一个将返回30,但第二个将返回29。@ChrisHammond Days不仅仅是“将TotalDays转换为int”,您应该删除返回(双倍)这个值。_ticks*(0.0/1.0)代码>来自您的答案。这显然每次都会返回零。正确的代码是返回(双倍)this.\u ticks*DaysPerTick
其中DaysPerTick
声明为private const double DaysPerTick=1.1574074e-12代码>。在编写问题标题时,请尽量更加具体。是否使用Direct3D?可以在运行时修改浮点精度。看这个。