我应该如何取一个以百分之一秒为单位的数字,并以秒为单位显示到小数点后两位?遵循 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
,而不是bc
和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")
"bc" 和 "dc" 都截断而不是圆形,所以现在我更喜欢 Perl
如果"N"中有您的百分之一秒数,则:
$ perl -e "printf('%.2f', $N/100)"
我从来都不是Perl的支持者,但它现在无处不在,我终于习惯使用它而不是sed/awk等。