2016-05-30 9 views
1

私がbashで必要とする計算を誰かが手助けできますか?Bashの浮動小数点数の扱い

現在、私は次のようにあります

Size=$((IPS * DataPages/(1024 * 1024 * 1024) * 1.05)) 

しかし、実行しようとしたときに、私は次のエラーを取得する:

./buffer: line 20: IPS * DataPages/(1024 * 1024 * 1024) * 1.05: syntax error: invalid arithmetic operator (error token is ".05") 

私は、印刷やawkのどちらかのように、他の選択肢を使用することに開いていますBCでも、私はいくつかの指導が必要です。

答えて

2

bashは、浮動小数点演算をサポートしていません。それにはbcを使用してください。シェル変数の使用方法置換にそれを捕捉するために

IPS=2 
DataPages=3 
bc --mathlib <<< "($IPS * $DataPages/(1024 * 1024 * 1024) * 1.05)" 

bcに有効浮動小数点演算に--mathlib(又は-l)を渡すオプション

... 
Size=$(bc --mathlib <<< "($IPS * $DataPages/(1024 * 1024 * 1024) * 1.05)") 
0

(())は浮動小数点演算をサポートしていません。 bcまたはawkを使用します。 awkの

Size=$(awk -v ips="$IPS" -v dp="$DataPages" 'BEGIN{size=ips * dp/ (1024 * 1024 * 1024) * 1.05; printf "%0.02f",size}') 
を使用して

Size=$(echo "scale=2; $IPS * $DataPages/(1024 * 1024 * 1024) * 1.05 " | bc) 
# scale is for number of digits after the floating point 

bcの使用

関連する問題