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