2014-01-23 37 views
-4

我想通過這些數值嘗試這種代碼:爲什麼c#不顯示變量的變化?

float timeStamp; 
a=1338526801  
    b=113678 

timeStamp = a +(b/1000000); 

然後,我改變了對b113680計算時間戳,

timeStamp = a+ (b/1000000) ; 
在現實中的時間戳應該改變

因爲b已經改變,但是當我通過console.writeline()打印它時,timeStamp值不會改變。我認爲它引用了c#值的精度,但我不知道如何解決它。

+11

不,你沒有嘗試過這個代碼,因爲它甚至沒有編譯。請發佈您的實際代碼。你的問題也很不明確,請更清楚你想要做什麼,你希望發生什麼,以及發生了什麼。 – tnw

+0

所以使用更加精確的'double'。 – Harrison

+1

使用'DateTime.Seconds'或將'DateTime'轉換爲Ticks。漂浮/雙打本身就是不準確的。如果你想知道爲什麼維基百科確實對IEEE浮點標準有一個很好的解釋。 – evanmcdonnal

回答

-1

你應該看看Floating-Point Types Table (C# Reference)它提供了以下信息

> Type  Approximate range  Precision 
> float  ±1.5e−45 to ±3.4e38 7 digits 
> double  ±5.0e−324 to ±1.7e308 15-16 digits 

你的338526801組合+ 113678/1000000大約爲16位,並會更適應雙。

其中包含7位浮點可以讓你準確度338526800.000000並沒有更多的

float f = 338526801 + 113678f/1000000 
System.Diagnostics.Debug.Print(f.ToString("F6")); // results in 338526800.000000 

但是雙獲得15-16位實際上可以將數據存儲到您的精度。

double d = 338526801d + 113678d/1000000 
System.Diagnostics.Debug.Print(d.ToString("F6")); // results in 338526801.113678 

你也可以看看TimespanDateTime這給你精度100納秒單位。由於有10個刻度在微秒(美國),同樣的時間跨度是:

TimeSpan time = new TimeSpan(3385268011136780); 

一位評論建議您可能會嘗試轉換Unix時間。如果是這樣,那麼您可以將Timespan添加到代表1/1/1970的正確DateTime中。

+0

不,因爲它將ts_usec除以1000000,所以在它的值發生變化之後它可能會使值變爲trucate,所以時間戳值不會改變,這是我的問題 –

+0

@marziyeesmslampanah我添加了一些其他信息,這些信息可以幫助您瞭解問題。 – Harrison

+0

非常感謝,我想我應該使用時間跨度或DateTime來解決我的問題,但我不知道如何定義這些類型的變量。 –