12

我应该如何取一个以百分之几为单位的数字并以秒为单位显示到小数点后两位?遵循 dTime 函数的伪代码我不确定,但你会得到我的目标。

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

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

T=$time
sleep 2
T=$dTime T
4

4 回答 4

38

Bash 有一个内置的 printf 函数:

printf "%0.2f\n" $T
于 2012-11-29T18:14:31.470 回答
6

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

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

或者,如果您还想要领先0

T=0.$(dc <<< "2 k $(date +%N) 1000000000 / p")
于 2012-11-29T18:25:34.553 回答
6

下面可以完成 2 位小数精度,

echo $T | bc -l | xargs printf "%.2f"
于 2018-05-20T10:27:10.763 回答
0

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

如果“N”中有你的百分之几秒,那么:

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

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

于 2018-09-06T03:02:15.940 回答