首页 > 解决方案 > Bash 上限函数舍入非常小的数字

问题描述

我正在尝试在 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。

标签: bashrounding

解决方案


使用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)


推荐阅读