Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Bash中将数字舍入为10_Bash_Numbers_Rounding - Fatal编程技术网

在Bash中将数字舍入为10

在Bash中将数字舍入为10,bash,numbers,rounding,Bash,Numbers,Rounding,我做了一个简单的函数,结果是64.998472747。有没有办法将其四舍五入到60?如果是65.998472747,则四舍五入到70?这在Bash中可能吗 light=62.998472747 printf "$.0f" "$light" 所以我的函数只舍入到一个整数。在这种情况下,它将四舍五入到63 谢谢大家! 您可以这样使用awk: awk -v n='64.998472747' 'BEGIN{print int((n+5)/10) * 10}' 60 awk -v n='67.9984

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

light=62.998472747
printf "$.0f" "$light"
所以我的函数只舍入到一个整数。在这种情况下,它将四舍五入到63


谢谢大家!

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

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

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

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

我们使用先去掉点后的后缀小数,然后再执行(现在)整数运算。

我一直在寻找解决方案。再次感谢你!