我最近在.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 ...
第一考虑是想知道为什么他们选择double
FromMilliseconds
。如前所述,文档中的备注说明如下: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
-讽刺