私はそれが本当に愚かな質問であることを知っていますが、bashでこれを行う方法がわかりません:
20 / 30 * 100
それは66.67
である必要がありますが、浮動小数点数をサポートしていないため、exprは0
と言っています。 Linuxのどのコマンドがexprを置き換え、この等式を実行できますか?
Bashのmanページで報告されているように:
シェルでは、特定の状況下で算術式を評価できます。評価はオーバーフローのチェックなしで固定幅整数で行われますが、0による除算はトラップされ、エラーとしてフラグが立てられます。
より良い部分的な結果を得るために、前に100を掛けることができます。
let j=20*100/30
echo $j
66
または、10のより高い倍数で、それが属する小数点以下の桁数を想像してください。
let j=20*10000/30
echo $j
66666
bc
がこれを行いますが、順序は重要です。
> echo "scale = 2; 20 * 100 / 30" | bc
66.66
> echo "scale = 2; 20 / 30 * 100" | bc
66.00
または、特定のケースの場合:
> export ach_gs=2
> export ach_gs_max=3
> x=$(echo "scale = 2; $ach_gs * 100 / $ach_gs_max" | bc)
> echo $x
66.66
どの方法を選択しても、これはあなたの人生を楽にする関数として組み込むのに熟しています。
#!/bin/bash
function pct () {
echo "scale = $3; $1 * 100 / $2" | bc
}
x=$(pct 2 3 2) ; echo $x # gives 66.66
x=$(pct 1 6 0) ; echo $x # gives 16
私は通常Perlを使用します:
Perl -e 'print 10 / 3'
ただawkでそれをしてください
# awk 'BEGIN{print 20 / 30 * 100}'
66.6667
変数に保存します
# result=$(awk 'BEGIN{print 20 / 30 * 100}')
# echo $result
66.6667
> echo "20 / 30 * 100" | bc -l
66.66666666666666666600
これはpaxdiabloによる回答の簡略化です。 -lは、スケール(10進数の後の桁数)を20に設定します。また、trig関数などを含む数学ライブラリをロードします。