Bash天花板函数舍入为非常小的数字

时间:2018-09-04 13:08:05

标签: bash rounding

我试图在bash中创建一个上限函数,该函数需要一个数字并向上舍入为上限函数。

例如: 如果shard_div为3.2,则rounded_up为4。

rounded_up=`echo $shard_div | awk '{printf("%d\n",$0+=$0<0?0:0.9)}'`

出现问题的地方是一些shard_div变量是数字,例如0.5 ^ -10或0.00001。发生这种情况时,rounded_up为0。

我不希望使用if语句,并且正在运行的机器没有Perl。

2 个答案:

答案 0 :(得分:0)

使用bc。有点健壮,但是可以。

rounded_up=$(echo "scale=0; v=$shard_div; v=6; if (v%1 != 0) v = (v + 1); v / 1" | bc)

/ 1是必需的,否则bc无法缩放。 v%1 == 0情况需要处理,否则整数也会按比例放大(例如v=5; 5+1-> 6)

答案 1 :(得分:0)

awk:

$ awk '{print int($1) + ( $1!=int($1) && $1>=0 )}'

一些测试:

$ echo 0 | awk '{print int($1)+($1!=int($1)&&$1>=0)}'
0
$ echo 0.1 | awk '{print int($1)+($1!=int($1)&&$1>=0)}'
1
$ echo 1 | awk '{print int($1)+($1!=int($1)&&$1>=0)}'
1
$ echo -1 | awk '{print int($1)+($1!=int($1)&&$1>=0)}'
-1
$ echo -1.1 | awk '{print int($1)+($1!=int($1)&&$1>=0)}'
-1