Bash天花板功能向下舍入非常小的数字[重复]

问题描述 投票:0回答:2

这个问题在这里已有答案:

我试图在bash中创建一个天花板功能,它将取一个数字并向上舍入作为天花板功能。

例如:如果shard_div为3.2,则round_up将为4。

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

在某些shard_div变量中出现问题的地方是0.5 ^ -10或0.00001之类的数字。发生这种情况时,向上舍入为0。

我不想使用if语句,而且运行的机器没有Perl。

bash rounding
2个回答
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)


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
© www.soinside.com 2019 - 2024. All rights reserved.