Bootstrap

shell中实现浮点数运算

linux下的浮点数运算shell实现浮点数运算

awk实现浮点数运算

AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。

主要部分 awk ‘{printf “%0.8f\n”, $1/$2}’
使用printf实现小数点后数值的保留。
0.8f保留小数点后8位 。
$1/$2表示传入的当前行的第一个数据除以第二个数据。
例如

相除

v=$(echo $a $b|awk '{printf "%0.4f\n", $1/$2}')
v=`echo $a $b|awk '{printf "%0.4f\n", $1/$2}'`
#表示a/b,保留4位小数

相加

while read v1 v2
do
    v=$(echo $a $b|awk '{printf "%0.4f\n", $1+$2}') >> result.txt
done < count.txt
从count.txt逐行读取数据,逐行将第一列第二列相加并将结果追加到result.txt中。

相除,可复制运行查看结果

a=1
b=3
v=$(echo $a $b|awk '{printf "%0.8f\n", $1/$2}')
echo "$a / $b = $v"

进行大量计算时,使用awk效率较高

bc实现浮点数运算

使用bc命令需要主机已有bc命令。使用bc指令默认不指定scale,默认为0
scale表示保留的小数点后位数。
若操作数的小数位数大于scale,
例如:

a=1.1111111 
b=2
b1=$(echo "scale=2;$a/$b"|bc)
#作用相同
b1=`echo "scale=2;$a/$b"|bc`    

#输出的小数位数以a为准

可运行查看

a=2.111
b=2
b1=$(echo "scale=2;$a/$b"|bc)
b2=$(echo "$a/$b"|bc)
b3=$(echo "scale=6;$a/$b"|bc)
echo $b1 $b2 $b3
#结果为 1.05 1 1.055500

当相除结果小于1时,小数点前的0会省略,使用字符拼接0即可

a=2.111
b=5
b1=$(echo "scale=2;$a/$b"|bc)
b2=$(echo "$a/$b"|bc)
b3=$(echo "scale=6;$a/$b"|bc)
echo $b1 $b2 $b3
#结果为 .42 0 .422200

b4=`echo 0$b3`
echo $b4
#结果为0.422200
;