shell中用bc进行浮点运算(转帖)
Bash 不能處理浮點(diǎn)運(yùn)算, 并且缺乏特定的一些操作,這些操作都是一些重要的計(jì)算功能.幸運(yùn)的是,?bc?可以解決這個(gè)問題.bc?不僅僅是個(gè)多功能靈活的精確的工具, 而且它還提供許多編程語言才具備的一些方便的功能.?因?yàn)樗且粋€(gè)完整的 UNIX 工具, 所以它可以用在管道中,?bc?在腳本中也是很常用的.
?
這里有一個(gè)簡單的使用 bc 命令的模版可以用來在計(jì)算腳本中的變量. 用在命令替換 中.
variable=$(echo "OPTIONS; OPERATIONS" | bc)?
如:interest_rate=$(echo "scale=9; $interest_r/12 + 1.0" | bc)
?以前一直以為bc做了不了浮點(diǎn)運(yùn)算,雖然他能結(jié)算類似
13.4*45.6
的乘法,但是在計(jì)算除法的時(shí)候,無論你輸入
5/3
還是
5/3.0
得到的結(jié)果都是
1
我也沒有去看man手冊,今天無意中發(fā)現(xiàn)了ibase這個(gè)變量,是bc使用的一個(gè)變量,表示輸入的數(shù)字的進(jìn)制,比如ibase=8,表示你輸入的數(shù)是8進(jìn)制的。
這讓我很好奇,于是去看了man手冊,原來他是可以做浮點(diǎn)除法的,只是默認(rèn)不輸出小數(shù)點(diǎn)后面的值,它同樣采用了一個(gè)變量來控制--scale,其值表示輸出多少位小數(shù)。另外一個(gè)和ibase對應(yīng)的變量是obase,表示結(jié)果輸出采用什么進(jìn)制,默認(rèn)是10進(jìn)制。
給出幾個(gè)例子,大家一看就明白了。
[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
轉(zhuǎn)載于:https://www.cnblogs.com/lingepeiyong/archive/2011/12/27/2303642.html
總結(jié)
以上是生活随笔為你收集整理的shell中用bc进行浮点运算(转帖)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。