a=1
b=2
result=$(printf "%.2f" `echo "scale=2; $a/$b"|bc`)
echo $result
输出结果: 0.50
参考:
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