Bash中的回合数为10

时间:2017-07-21 15:04:39

标签: bash numbers rounding

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

light=62.998472747
printf "$.0f" "$light"

所以我的函数只舍入到整数。在这种情况下,它将把它四舍五入到63.

谢谢!

2 个答案:

答案 0 :(得分:2)

您可以像这样使用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

为了使它成为通用的,你可以将除数作为参数传递,并将效用函数设为:

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

然后将其称为:

round 95.0000000001 10
100

round 94.9999 10
90

round 94.9999 1
95

round 95.5000000001 1
96

答案 1 :(得分:0)

由于您明确要求bash 中的解决方案,因此它是:

round10() {
    echo $(( ((${1%.*}+5)/10)*10 ))
}

例如:

$ round10 64.998472747
60
$ round10 65.998472747
70
$ round10 3.14
0
$ round10 6.28
10

我们使用Parameter Expansion首先在点后删除后缀小数,并结合Arithmetic Expansion执行(现在)整数运算。