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

时间:2012-11-29 18:09:53

标签: linux bash

我应该如何获取以秒为单位的数字并以秒为单位显示两位小数?遵循dTime函数的Psuedo代码我不确定但是你会得到我想要的目标。

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

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

T=$time
sleep 2
T=$dTime T

4 个答案:

答案 0 :(得分:26)

Bash内置了printf函数:

printf "%0.2f\n" $T

答案 1 :(得分:5)

以下将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(或{{1}圆)正确到两个小数位。如果您想要后一种行为并将结果分配给变量dc,您可以使用,例如,

T

或者,如果您还想要领先T=$(dc <<< "2 k $(date +%N) 1000000000 / p")

0

答案 2 :(得分:1)

以下可以进行2位小数精度,

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

答案 3 :(得分:0)

“ bc”和“ dc”都被截断而不是四舍五入,所以现在我更喜欢Perl

如果“ N”中包含您的秒数,则:

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

我从不曾是Perl的支持者,但现在它无处不在,而我终于被它的使用所取代,而不是sed / awk等。