2011-06-25 51 views
2

我正在轉換Linux記錄器在Windows中工作。 記錄器使用snprintf進行打印。 在linux中,這個記錄器輸出timeofday.tv_usec,即給這樣的:如何獲得數字的最後一位數字?

Jun 24 18:30:31-232928 test-transport... 

在我的Windows版本,使用QueryPerformanceCounter的,我產生的結果是這樣的:

jun 24 23:54:18-866568508 test-transport.... 

在Linux中,uSeconds正好有6位數字,但是這個窗口函數產生9位數字。我怎麼能打印只有最後6位數字?請記住,這是一個時間關鍵的代碼。

+0

只需mod 10^7? – Mikola

+0

在第二個例子中打印最後6位數字會給你'568508'而不是'866568',你確定嗎? –

回答

7

使用將數字除以10的餘數除以要保留的位數。

你的情況:

num % 1000000 
+1

當然,我怎麼會忘記它?我應該多睡一會兒! – bratao

0

這真的取決於什麼號碼866568508代表。這是幾納秒嗎?還是微秒?或者這是以其他數字爲單位的,例如QueryPerformanceFrequency?我們假設866568508代表n赫茲時鐘的866568508刻度。然後,以866568508表示的秒數的時間量爲866568508/n。這是866568508*1e6/n微秒。

因此,您使用最後6位數字獲得微秒的想法不一定是正確的。既然你說你通常有9位數字,n可能是1e9(即,你有納秒分辨率)。在這種情況下,您可以通過執行866568508*1e6/1e9 = 866568508/1e3`從866568508微秒。

但正如我所說,這一切都取決於你是否知道分辨率是什麼。

從一些快速谷歌搜索,似乎QueryPerformanceFrequency應該給你的頻率。

相關問題