TimeSpan.TotalMilliseconds的奇怪实现

本文关键字:实现 TotalMilliseconds TimeSpan | 更新日期: 2023-09-27 18:28:03

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<=刻度 * 0.0001<=922337203685477.5807

为什么它会削减小数部分?

平克曼说:"双精度为15-16位"。但是为什么总秒数不削减小数部分?

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

TimeSpan.TotalMilliseconds的奇怪实现

您应该检查类型精度:MSDN 双重定义。
如您所见,double具有 15-16 位精度,并且您将其中大部分用于整数部分。

我看过Mono。

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

它似乎只是一个特定于实现的。