2013-08-19 47 views
1
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奇怪實現TimeSpan.TotalMilliseconds

爲什麼它切小數部分? pinckerman說「double有15-16位數的精確度」。但爲什麼TotalSeconds不能削減小數部分?

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

可能是double有15-16位數的精度,你用它們的一部分作爲整數? – pinckerman

+0

@pinckerman你是對的。似乎我需要了解浮動。 – Vince

+0

@pinckerman,但爲什麼TotalSeconds不會削減小數部分?我編輯了問題。 – Vince

回答

0

我已查看Mono。

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

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

+0

我希望它是一樣的: double num =(double)this._ticks * 0.0001; – pinckerman

+0

@pinckerman'public const long TicksPerMillisecond = 10000L;' – Vince

0

您應該檢查類型精度: MSDN double definition
正如你所看到的,double的精度爲15-16位,並且你將大部分精度用於整數部分。