我应该如何取一个以百分之几为单位的数字并以秒为单位显示到小数点后两位?遵循 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
下面将 by 的输出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"
注意区别, withprintf
你会有领先0
,而不是bc
and dc
。printf
和bc
(或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 等。