TimeSpan FromMilliseconds奇怪的实现?

问题描述 投票:28回答:5

我最近在.NET TimeSpan实现中遇到了一些奇怪的行为。

TimeSpan test = TimeSpan.FromMilliseconds(0.5);
double ms = test.TotalMilliseconds; // Returns 0

FromMilliseconds以double作为参数。但是,值似乎在内部四舍五入。

如果我用5000个滴答声(.5 ms)实例化一个新的TimeSpan,则TotalMilliseconds的值正确。

通过查看反射器中的TimeSpan实现,发现输入实际上被强制转换为long。

Microsoft为什么将FromMilliseconds方法设计为采用双精度参数代替长参数(因为在此实现中双精度值无用?)>

我最近在.NET TimeSpan实现中遇到了一些奇怪的行为。 TimeSpan测试= TimeSpan.FromMilliseconds(0.5); double ms = test.TotalMilliseconds; //返回0 FromMilliseconds ...

c# .net timespan
5个回答
26
投票

第一考虑是想知道为什么他们选择double


4
投票
显然,这是设计使然。 documentation表示:

2
投票
接受双精度是逻辑设计。您可以以毫秒为单位。

1
投票
您的代码问题实际上是第一行,您在此处调用FromMilliseconds。如前所述,文档中的备注说明如下:

0
投票
或者,您可以这样做:

double x = 0.4; TimeSpan t = TimeSpan.FromTicks((long)(TimeSpan.TicksPerMillisecond * x)); // where x can be a double double ms = t.TotalMilliseconds; //return 0.4

-讽刺
© www.soinside.com 2019 - 2024. All rights reserved.