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

Nei*_*los 7 linux bash

我应该如何获取一个以秒为单位的数字并以秒为单位显示两位小数?遵循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
Run Code Online (Sandbox Code Playgroud)

Ale*_*sky 26

Bash有一个内置的printf功能:

printf "%0.2f\n" $T
Run Code Online (Sandbox Code Playgroud)

  • 请注意 printf 取决于区域设置!例如,在 Fr 中,语言环境中使用“,”进行浮点分隔,而不是“.”。所以在 Fr 中, printf "%0.2f\n" 26.600 将返回错误(该数字必须表示为“26,600”) (3认同)

Sau*_*abh 6

下面可以做 2 个小数精度,

echo $T | bc -l | xargs printf "%.2f"
Run Code Online (Sandbox Code Playgroud)


gni*_*urf 5

下面将输出date +%N除以1000000000,将结果舍入到两个小数位并将结果赋给变量T.

printf -v T "%.2f" $(bc -l <<< "$(date +%N)/1000000000")
Run Code Online (Sandbox Code Playgroud)

如果你只想打印东西,

bc <<< "scale=2; $(date +%N)/1000000000"
Run Code Online (Sandbox Code Playgroud)

如果您不喜欢bc并且想要使用dc(因为它反向抛光,使用起来更轻一些,更有趣),

dc <<< "2 k $(date +%N) 1000000000 / p"
Run Code Online (Sandbox Code Playgroud)

注意区别,printf你将拥有领先优势0,而不是bcdc.printfbc(或dc)之间存在另一个区别:printf舍入到最接近的数字到两个小数位,而bc(或dc)舍入正确到两个小数位.如果您想要后一种行为并将结果分配给变量T,您可以使用,例如,

T=$(dc <<< "2 k $(date +%N) 1000000000 / p")
Run Code Online (Sandbox Code Playgroud)

或者,如果你也想要领先0:

T=0.$(dc <<< "2 k $(date +%N) 1000000000 / p")
Run Code Online (Sandbox Code Playgroud)