我願做我的腳本如下操作:司在腳本和浮點
1 - ((m - 20)/34)
我想分配此操作另一個變量的結果。我想我的腳本使用浮點數學。例如,對於m = 34:
results = 1 - ((34 - 20)/34) == 0.588
我願做我的腳本如下操作:司在腳本和浮點
1 - ((m - 20)/34)
我想分配此操作另一個變量的結果。我想我的腳本使用浮點數學。例如,對於m = 34:
results = 1 - ((34 - 20)/34) == 0.588
Bash不會執行浮點數學運算。你可以使用awk或者bc來處理這個。下面是一個awk例如:
$ m=34; awk -v m=$m 'BEGIN { print 1 - ((m - 20)/34) }'
0.588235
要輸出分配給一個變量:
var=$(awk -v m=$m 'BEGIN { print 1 - ((m - 20)/34) }')
你可以使用bc
計算器。它將使用小數(不是二進制浮點)做任意精度數學,如果你從它的0默認設置increease scale
:
$ m=34
$ bc <<< "scale = 10; 1 - (($m - 20)/34)"
.5882352942
的-l
選項將加載標準的數學庫和默認的規模,以20:
$ bc -l <<< "1 - (($m - 20)/34)"
.58823529411764705883
然後,您可以用printf格式化輸出,如果你選擇:
printf "%.3f\n" "$(bc -l ...)"
教慶典如整數除法浮點結果:
#!/bin/bash
div() # Arguments: dividend and divisor
{
if [ $2 -eq 0 ]; then echo division by 0; exit; fi
local p=12 # precision
local c=${c:-0} # precision counter
local d=. # decimal separator
local r=$(($1/$2)); echo -n $r # result of division
local m=$(($r*$2))
[ $c -eq 0 ] && [ $m -ne $1 ] && echo -n $d
[ $1 -eq $m ] || [ $c -eq $p ] && return
local e=$(($1-$m))
let c=c+1
div $(($e*10)) $2
}
result=$(div 1080 633) # write to variable
echo $result
result=$(div 7 34)
echo $result
result=$(div 8 32)
echo $result
result=$(div 246891510 2)
echo $result
result=$(div 5000000 177)
echo $result
輸出:
1.706161137440
0.205882352941
0.25
123445755
28248.587570621468
非常好。如果將'let c = c + 1'改爲'c = $(($ c + 1))',這甚至會符合POSIX標準,但這種遞歸看起來很昂貴。 –
使用該腳本打開此文件,喜歡的編輯器,如:
$ sudo vim /usr/bin/div
然後粘貼此代碼:
#!/bin/bash
# Author: Danial Rikhteh Garan ([email protected])
if [[ -z "$1" ]] || [[ -z "$2" ]]; then
echo "Please input two number"
echo "for 100/50 use: div 10 50"
exit 1;
fi
div=$(echo "$1/$2" | bc -l);
echo 0$div | sed 's/[0]*$//g'
現在chmod命令755:
$ sudo chmod 755 /usr/bin/div
現在使用它:
$ div 5 100
0.05
在腳本中您可以使用此:
var=$(div 5 100);
echo "$var"
echo $a/$b|bc -l
給出結果。
例子:
read a b
echo $a/$b|bc -l
輸入& B值10 3,你會得到3。3333333333
如果要存儲在另一個變量中的值,然後使用代碼
read a b
c=`echo $a/$b|bc -l`
echo $c
它還提供了與上述相同的結果。 試試吧......
@ rubo77 我做了這樣的事情 '讓fail_percent = 0 讓總= $((pass_count + FAIL_COUNT)) printf的 「失敗百分比%F \ n」 $(BC - l <<<「($ fail_count/$ total)」)' 這裏總數= 16和fail_count = 15,我得到的答案爲.93750000000000000000,但它帶有一個錯誤,因爲printf無效的數字 我已經給出#!/ bin/bash在腳本開始處...任何想法爲什麼錯誤? –
使用'printf'%f \ n'$(bc -l <<< 1.2)'我得到錯誤'bash:printf:1.2:UngültigeZahl。 ' – rubo77