我最近在 .NET 的 TimeSpan
实现中遇到了一些奇怪的行为。
TimeSpan test = TimeSpan.FromMilliseconds(0.5);
double ms = test.TotalMilliseconds; // Returns 0
FromMilliseconds
方法以 double 类型的参数为输入。然而,这个值在内部被四舍五入了。
如果我用 5000 个滴答(.5 毫秒)实例化一个新的 TimeSpan
,则 TotalMilliseconds
的值是正确的。
通过反射查看 TimeSpan
的实现,发现输入实际上被强制转换为 long 类型。
为什么微软要设计 FromMilliseconds
方法以 double 类型的参数作为输入,而不是 long 类型(因为在此实现中使用 double 值是无效的)?