TimeSpan.FromSeconds 需要一个双倍,并且可以表示低至100纳秒的值,但是这种方法莫名其妙地将时间四舍五入到整个毫秒.
鉴于我只花了半个小时来确定这个(记录在案的!)行为,知道为什么会出现这种情况会更容易忍受浪费的时间.
任何人都可以建议为什么这种看似适得其反的行为被实施了?
TimeSpan.FromSeconds(0.12345678).TotalSeconds
// 0.123
TimeSpan.FromTicks((long)(TimeSpan.TicksPerSecond * 0.12345678)).TotalSeconds
// 0.1234567
Run Code Online (Sandbox Code Playgroud) 我最近在.net timespan实现中遇到了一些奇怪的行为.
TimeSpan test = TimeSpan.FromMilliseconds(0.5);
double ms = test.TotalMilliseconds; // Returns 0
Run Code Online (Sandbox Code Playgroud)
FromMilliseconds采用double作为参数.但是,似乎内部的值是四舍五入的.
如果我使用5000个滴答(.5毫秒)实例化新的时间跨度,则TotalMilliseconds的值是正确的.
查看反射器中的TimeSpan实现会发现输入实际上已经转换为long.
为什么Microsoft设计FromMilliseconds方法采用double参数而不是long(因为在实现时,double值是无用的)?