我应该如何获取以秒为单位的数字并以秒为单位显示两位小数?遵循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
答案 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
,而不是bc
和dc
。 printf
和bc
(或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等。