繁体   English   中英

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

[英]How to display number to two decimal places in bash function

如何取百分之一秒的数字,并以秒为单位显示到小数点后两位? 我不确定要遵循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

以下代码将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 ,而不是bcdc printfbc (或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等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM