33

私はそれが本当にばかげた質問であることを知っていますが、bashでこれを行う方法がわかりません:

20 / 30 * 100

そうあるべきですが、float をサポートしていないため、66.67expr は と言っています。0expr を置き換えてこの等号を実行できる Linux のコマンドはどれですか?

4

6 に答える 6

36

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
于 2009-08-10T09:52:12.560 に答える
14

ただawkでそれをしなさい

# awk 'BEGIN{print 20 / 30 * 100}'
66.6667

変数に保存します

# result=$(awk 'BEGIN{print 20 / 30 * 100}')
# echo $result
66.6667
于 2009-08-10T10:17:35.273 に答える
14

私は一般的にperlを使用します:

perl -e 'print 10 / 3'
于 2009-08-12T15:19:44.187 に答える
7

bashのmanページで報告されているように:

シェルでは、特定の状況下で算術式を評価できます...評価は、オーバーフローのチェックなしで固定幅の整数で行われますが、0 による除算はトラップされ、エラーとしてフラグが立てられます。

より良い部分的な結果を得るために、前に 100 を掛けることができます。

let j=20*100/30
echo $j

66

または、より高い 10 の倍数で、それが属する小数点以下の桁数を想像してください。

let j=20*10000/30
echo $j

66666

于 2009-08-10T09:55:21.807 に答える
0

別の明白なオプション:

python -c "print(20 / 30 * 100)"

Python 3 を使用していると仮定します。それ以外の場合は、python3.

于 2020-01-31T21:52:06.810 に答える