shell脚本中浮点数运算

3 篇文章 0 订阅
1 篇文章 0 订阅
a=1
b=2
result=$(printf "%.2f" `echo "scale=2; $a/$b"|bc`)
echo $result

输出结果: 0.50

 

参考:


shell脚本中浮点数运算

https://www.cnblogs.com/liurong07/p/12519218.html

最近写了个shell脚本,查看运算结果时发现,结果值没有小数点。

怎么回事?

原来shell中的运算都是整数运算。那怎么把小数点搞出来,用这个方法:

[root@xxx]$ echo "scale=2;  10/3" | bc
3.33

这里scale=2,表示小数点后取2位,如果不加scale,默认为0,不要小数点:

[root@xxx]$ echo "10/3" | bc          
3

这里|bc是为了完成运算的,和expr的意思有点像,如果不加|bc,就是直接打印:

[root@shpbs01-krds-sh000088.shpbs01.ksyun.com /home/liurong]$ echo "scale=2;  10/3"
scale=2;  10/3

在脚本里,可以把上述运算结果放在变量中:

[root@xxx]$ export c=$(echo "scale=2;  10/3" | bc)
[root@xxx]$ echo $c
3.33


bc显示小数点前的0

http://www.361way.com/linux-bc-point-zero/4960.html

    #!/bin/bash
    #方法1
    res1=$(printf "%.2f" `echo "scale=2;1/3"|bc`)
    res2=$(printf "%.2f" `echo "scale=2;5/3"|bc`)
    #方法2
    #v=$(echo $big $small | awk '{ printf "%0.2f\n" ,$1/$2}')
    v1=$(echo 1 3 | awk '{ printf "%0.2f\n" ,$1/$2}')
    v2=$(echo 5 3 | awk '{ printf "%0.2f\n" ,$1/$2}')
    #方法3
    mem1=`echo "scale=2; a=1/3; if (length(a)==scale(a)) print 0;print a "|bc`
    mem2=`echo "scale=2; a=5/3; if (length(a)==scale(a)) print 0;print a "|bc`
    echo res1 is $res1
    echo res2 is $res2
    echo v1 is $v1
    echo v2 is $v2
    echo mem1 is $mem1
    echo mem2 is $mem2

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值