Bash 中的数字四舍五入为 10

Dan*_*iel 5 bash numbers rounding

我做了一个简单的函数,其结果是例如 64.998472747。有没有办法可以将其四舍五入到 60?如果是 65.998472747 四舍五入到 70 呢?这在 Bash 中可能吗?

light=62.998472747
printf "$.0f" "$light"
Run Code Online (Sandbox Code Playgroud)

所以我的函数只四舍五入到整数。在本例中,它将四舍五入为 63。

谢谢你!

anu*_*ava 6

您可以像这样使用 awk:

awk -v n='64.998472747' 'BEGIN{print int((n+5)/10) * 10}'
60

awk -v n='67.998472747' 'BEGIN{print int((n+5)/10) * 10}'
70

awk -v n='95.0' 'BEGIN{print int((n+5)/10) * 10}'
100

awk -v n='94.99' 'BEGIN{ print int((n+5)/10) * 10}'
90
Run Code Online (Sandbox Code Playgroud)

为了使其通用,您可以将除数作为参数传递,并将效用函数设置为:

round() { awk -v n=$1 -v d=$2 'BEGIN{print int((n+d/2)/d) * d}'; }
Run Code Online (Sandbox Code Playgroud)

然后将其称为:

round 95.0000000001 10
100

round 94.9999 10
90

round 94.9999 1
95

round 95.5000000001 1
96
Run Code Online (Sandbox Code Playgroud)