如何在bash函数中将数字显示到小数点后两位



我应该如何取一个以百分之一秒为单位的数字,并以秒为单位显示到小数点后两位?遵循 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.2fn" $T

下面可以做2个小数精度,

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

下面将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,而不是bcdcprintfbc(或dc)之间还有另一个区别:printf四舍五入到最接近的数字到小数点后两位,而bc(或dc)四舍五入到小数点后两位。如果你想要后一种行为并分配给结果T变量,你可以使用,例如,

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

或者,如果您还想要前导0

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

"bc" 和 "dc" 都截断而不是圆形,所以现在我更喜欢 Perl

如果"N"中有您的百分之一秒数,则:

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

从来都不是Perl的支持者,但它现在无处不在,我终于习惯使用它而不是sed/awk等。

相关内容

  • 没有找到相关文章

最新更新