您的位置:首页 > 运维架构 > Shell

shell中用bc进行浮点运算

2011-05-10 11:41 295 查看
Bash 不能处理浮点运算,
并且缺乏特定的一些操作,这些操作都是一些重要的计算功能.幸运的是, bc


可以解决这个问题.
bc

不仅仅是个多功能灵活的精确的工具,
而且它还提供许多编程语言才具备的一些方便的功能.

因为它是一个完整的 UNIX 工具, 所以它可以用在
管道

中,
bc

在脚本中也是很常用的.

这里有一个简单的使用 bc 命令的模版可以用来在计算脚本中的变量. 用在命令替换 中.

variable=$(echo "OPTIONS; OPERATIONS" |
bc)

如:interest_rate=$(echo "scale=9; $interest_r/12 + 1.0" | bc)

以前一直以为bc做了不了浮点运算,虽然他能结算类似

13.4*45.6

的乘法,但是在计算除法的时候,无论你输入

5/3

还是

5/3.0

得到的结果都是

1

我也没有去看man手册,今天无意中发现了ibase这个变量,是bc使用的一个变量,表示输入的数字的进制,比如ibase=8,表示你输入的数是8进制的。

这让我很好奇,于是去看了man手册,原来他是可以做浮点除法的,只是默认不输出小数点后面的值,它同样采用了一个变量来控制--scale,其值表示输出多少位小数。另外一个和ibase对应的变量是obase,表示结果输出采用什么进制,默认是10进制。

给出几个例子,大家一看就明白了。

[root@lancy bin]# echo "2.5*3.4" |bc

8.5

[root@lancy bin]# echo "5/3; 5/3.1" |bc

1

1

[root@lancy bin]# echo "scale=2; 5/3" |bc

1.66

[root@lancy bin]# echo "ibase=10;obase=2; 4*6"|bc

11000

[root@lancy bin]# echo "ibase=2; 110*101; obase=10" |bc

30

[root@lancy bin]# echo "ibase=2; 11110; obase=2" |bc

30
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: