2012-11-29 63 views
6

如何獲取以秒爲單位的數字並以秒爲單位將數字顯示爲小數點後兩位? Psuedo代碼遵循dTime函數我不確定,但你會得到我想要的東西。如何在bash函數中將數字顯示爲小數點後兩位

function time { 
    echo "$(date +%N)/10000000" 
} 

function dTime { 
    echo "($1/100).(${$1:${#1}-3:${#1}-1})" 
} 

T=$time 
sleep 2 
T=$dTime T 
+0

慶典僅執行整數運算。你的問題有點誤導,因爲你問的是顯示一個數字到兩位小數,你顯示的代碼清楚地執行浮點運算。 –

+0

使用[printf] [1]並搭載長時間測試的代碼。 [1]:http://stackoverflow.com/questions/4377871/sprintf-in-shell-scripting –

回答

20

擊提供一個內置的printf函數:

printf "%0.2f\n" $T 
+1

注意,printf的依賴於語言環境的設置!例如,在Fr中,','用於浮點分隔的語言環境,而不是'。'。因此,在Fr中, printf「%0.2f \ n」26.600 將返回一個錯誤(該數字必須表示爲「26,600」) – brunetton

4

下面通過1000000000劃分的date +%N輸出,舍入結果到小數點後兩位並且​​將結果提供給可變T分配。

printf -v T "%.2f" $(bc -l <<< "$(date +%N)/1000000000") 

如果你只是想打印的東西,

bc <<< "scale=2; $(date +%N)/1000000000" 

如果你不喜歡bc並希望使用dc(這是一個有點輕,多滑稽使用,因爲它的逆波蘭),

dc <<< "2 k $(date +%N) 1000000000/p" 

發現其中的差別,與printf你會具有領先0,不和dc。有printfbc(或dc)之間的另一個區別:printf四捨五入爲最接近的數字到小數點後兩位,而bc(或dc)正確四捨五入至小數點後兩位。如果你想後者的行爲,並分配給一個變量T的結果,你可以使用,例如,

T=$(dc <<< "2 k $(date +%N) 1000000000/p") 

,或者,如果你也想領先0

T=0.$(dc <<< "2 k $(date +%N) 1000000000/p") 
相關問題