簡體   English   中英

如何在bash函數中將數字顯示到小數點后兩位

[英]How to display number to two decimal places in bash function

如何取百分之一秒的數字,並以秒為單位顯示到小數點后兩位? 我不確定要遵循dTime函數的偽代碼,但是您會得到我想要的目標。

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

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

T=$time
sleep 2
T=$dTime T

Bash具有內置的printf函數:

printf "%0.2f\n" $T

以下代碼將date +%N的輸出除以1000000000 ,將結果四舍五入到小數點后兩位,並將結果分配給變量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 bc ,而不是bcdc printfbc (或dc )之間還有另一個區別: printf舍入到最接近的數字到小數點后兩位,而bc (或dc )舍入到小數點后兩位。 如果您希望這種后一種行為並將結果分配給變量T ,則可以使用例如

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

或者,如果您還想要前導0

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

下面可以完成2位小數精度,

echo $T | bc -l | xargs printf "%.2f"

“ bc”和“ dc”都被截斷而不是四舍五入,所以現在我更喜歡Perl

如果“ N”中包含您的秒數,則:

$ perl -e "printf('%.2f', $N/100)"

我從不曾是Perl的支持者,但現在它無處不在,並且最終我被搖擺使用它而不是sed / awk等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM