奇怪的TimeSpan.TotalMilliseconds实现

时间:2013-08-19 01:26:01

标签: c# .net

public double TotalMilliseconds
{
    [__DynamicallyInvokable]
    get
    {
        double num = (double)this._ticks * 0.0001;
        if (num > 922337203685477.0)
        {
            return 922337203685477.0;
        }
        if (num < -922337203685477.0)
        {
            return -922337203685477.0;
        }
        return num;
    }
}

-922337203685477.5808&lt; = ticks * 0.0001&lt; = 922337203685477.5807

为什么会削减小数部分?

pinckerman说“双精度为15-16位”。但是为什么TotalSeconds不会削减小数部分?

public double TotalSeconds
{
    [__DynamicallyInvokable, TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
    get
    {
        return (double)this._ticks * 1E-07;
    }
}

2 个答案:

答案 0 :(得分:0)

你应该检查类型精度: MSDN double definition
正如您所看到的,double具有15-16位精度,并且您将大部分精度用于整数部分。

答案 1 :(得分:0)

我看过Mono。

public double TotalMilliseconds
{
    get
    {
      return (double) _ticks  / TicksPerMillisecond;
    }
}

它似乎只是一个特定于工具的。