成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Shell腳本處理浮點數(shù)的運算和比較方式-創(chuàng)新互聯(lián)

這篇文章主要講解了“Shell腳本處理浮點數(shù)的運算和比較方式”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Shell腳本處理浮點數(shù)的運算和比較方式”吧!

創(chuàng)新互聯(lián)是一家網(wǎng)站設(shè)計、網(wǎng)站制作,提供網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,網(wǎng)站制作,建網(wǎng)站,按需策劃,網(wǎng)站開發(fā)公司,自2013年創(chuàng)立以來是互聯(lián)行業(yè)建設(shè)者,服務(wù)者。以提升客戶品牌價值為核心業(yè)務(wù),全程參與項目的網(wǎng)站策劃設(shè)計制作,前端開發(fā),后臺程序制作以及后期項目運營并提出專業(yè)建議和思路。

通過top命令看到的進程的CPU、內(nèi)存的使用率的百分比是一個浮點數(shù),我需要在寫腳本時對其進行處理,所以學(xué)習(xí)了一些,總結(jié)如下。

其實,Shell(這里是Bash)本身不具備處理浮點計算的能力,但是可以使用“bc”這個高精度的計算器工具來幫助,另外,也可以在Bash中調(diào)用“awk”腳本來處理浮點運算。

1. 用bc來處理計算(包括整型和浮點計算)

bc – An arbitrary precision calculator language
(1). 通常在Bash腳本中使用bc的范例格式為:
variable=$(echo “OPTIONS; OPERATIONS” | bc [options]) 即:echo “[選項];操作” | bc [選項]
(2). 在下面的腳本中,提到在第一個選項中,“scale”變量表示輸出中小數(shù)點后的精度,可以用于控制計算結(jié)果的精度;“ibase”和“obase”分別表示輸入和輸出數(shù)據(jù)的進制,可以用于數(shù)值進制的轉(zhuǎn)換。
(3). 浮點數(shù)的比較,如“if [ $(echo "$big > $small" | bc) -eq 1 ]”,將一個邏輯判斷式用管道傳給bc。如果結(jié)果為真則輸出1,否則輸出0,然后就可以利用這個結(jié)果進行進一步的操作了。
(4). bc本來是用一個文件作為輸入進行計算的(后面也有演示),所以可以將很復(fù)雜的計算寫到文件中,然后讓bc工具去處理到處計算結(jié)果。
注意一下:在使用除法運算符/時,要想保留小數(shù),需要自己設(shè)置scale,否則默認時scale,小數(shù)點后時0位。

2. 使用awk來處理浮點計算和浮點數(shù)比較

不解釋過多了,寫了示例腳本如下,看懂了這個就會知道怎么處理浮點計算和浮點數(shù)比較了。


代碼如下:


#!/bin/bash
# author: Jay <smile665@gmail.com>
# some examples for playing with floating point number.

# basic usage of 'bc' tool in Bash.
a=3.33
b=3.3
c=$(echo "$a + $b" | bc)
d=$(echo "$a * $b" | bc)
e=$(echo "scale=5; $a / $b" | bc)
echo "c=a+b=$a+$b=$c"
echo "d=a*b=$a*$b=$d"
echo "e=a/b=$a/$b=$e"

# "-l" parameter for 'bc' means using math library.
pi=$(echo "scale=10; 4*a(1)" | bc -l)
s=$(echo "s($pi/6)" | bc -l)
echo "pi=$pi"
echo "s=sin(pi/6)=$s"

# use more options of 'bc' tool
r=$(echo 'ibase=10;obase=2; 15+16' | bc)
echo "binary of (15+16) is $r"

# comparison for floating point numbers using 'bc'
big=100
small=99.9
if [ $(echo "$big > $small" | bc) -eq 1 ]; then
        echo "$big is bigger than $small"
fi

# deal with floating point numbers with 'awk' language
echo $(awk -v x=10 -v y=2.5 'BEGIN {printf "10/2.5=%.2f\n",x/y}')
v=$(echo $big $small | awk '{ printf "%0.8f\n" ,$1/$2}')
echo "$big / $small = $v"

echo $big $small | awk '{if($1>$2) {printf"%f > %f\n",$1,$2} else {printf"%f <%f\n",$1,$2}}'

執(zhí)行的結(jié)果如下:


代碼如下:


master@jay-linux:~/workspace/mygit/shell/sh3012$ ./floating-point.sh
c=a+b=3.33+3.3=6.63
d=a*b=3.33*3.3=10.98
e=a/b=3.33/3.3=1.00909
pi=3.1415926532
s=sin(pi/6)=.49999999994373819220
binary of (15+16) is 11111
100 is bigger than 99.9
10/2.5=4.00
100 / 99.9 = 1.00100100
100.000000 > 99.900000


另外,bc處理一個文件中的計算邏輯,演示如下:

代碼如下:


master@jay-linux:~/workspace/mygit/shell/sh3012$ cat temp.bc
3+8
3/8
scale=2; 3/8

master@jay-linux:~/workspace/mygit/shell/sh3012$ bc -q temp.bc
11
0
.37


bc是強大的工具,請“man bc”查看詳情;同樣,請“man awk”。

感謝各位的閱讀,以上就是“Shell腳本處理浮點數(shù)的運算和比較方式”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Shell腳本處理浮點數(shù)的運算和比較方式這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

標題名稱:Shell腳本處理浮點數(shù)的運算和比較方式-創(chuàng)新互聯(lián)
本文鏈接:http://jinyejixie.com/article24/djcgje.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站云服務(wù)器、網(wǎng)站排名、網(wǎng)站維護、外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護公司
东方市| 台南市| 淮阳县| 西贡区| 翁牛特旗| 沙洋县| 荔浦县| 阿勒泰市| 重庆市| 新兴县| 西峡县| 临沭县| 江孜县| 樟树市| 柞水县| 林口县| 邓州市| 日土县| 五河县| 武宣县| 沙坪坝区| 滁州市| 宝丰县| 崇左市| 巴马| 定边县| 衡南县| 龙海市| 乌拉特后旗| 常宁市| 牡丹江市| 宁乡县| 齐齐哈尔市| 玉环县| 郑州市| 秦皇岛市| 林州市| 黔西| 酒泉市| 舞钢市| 白城市|