shell向上取整

需求

1,向上取整;
2,兼容小数点后为0的情况;
3,兼容负数;


实现

shell bash本身没有向上取整的函数,shell里变量也都当做字符串处理,向上取整需要自己手动写一下。
我本来想在网上找一个通用的实现,但暂时没有找到,于是自己手写了一个:

function ceil(){
  floor=`echo "scale=0;$1/1"|bc -l ` # 向下取整
  add=`awk -v num1=$floor -v num2=$1 'BEGIN{print(num1<num2)?"1":"0"}'`
  echo `expr $floor  + $add`
}
#下面测试
a=3.5
b=3.0
c=-2.1
echo `ceil $a`
echo `ceil $b`
echo `ceil $c`
4
3
-2

其他不通用方法

网上还有些其他的方法,但坦白说大部分都不够通用,容易出问题:
比如直接把小数点后面的抹掉然后+1的,这种没有考虑小数点后都是0的情况,如

your_var=3.00
echo $((${your_var//.*/+1}))
4

还有的没有考虑负数的情况,如

your_var=-2.1
res=`awk -v a=$your_var 'BEGIN{print(int(a)==(a))?int(a):int(a)+1}'`
echo $res
-1
  • 10
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值