このステートメントが機能しないのはなぜですか?
total=`expr $mPercent / 100 "*" .482 + $fPercent / 100 "*" .518`
mPercent と fPercent は awk 文から取得した数値です。また、エラーメッセージとして「expr:数値以外の引数」が表示されます。
メモ:彼の質問の目的のために、両方の変数の値が3.27であるとしましょう。
答え1
bash
浮動小数点演算は実行できず、整数演算のみ実行できます。代わりに、以下を使用することをお勧めしますbc -l
。
$ mPercent='2.72'
$ fPercent='3.14'
$ bc -l <<< $(echo "$mPercent / 100 "*" .482 + $fPercent / 100 "*" .518")
.02937560000000000000
答え2
このexpr
コマンドは整数または文字列操作のみを実行できます。このガイドのマニュアルページを確認してください。
オペランドは整数でも文字列でもかまいません。整数は、オプションで、前に「-」が付された 1 つ以上の 10 進数で構成されます。 'expr' 適用される演算に応じて、オペランドの位置に現れるすべての項目を整数または文字列に変換します。
したがって、これらのタスクを実行するには、次のコマンドライン電卓を使用する必要がありますbc
。
はい
$ mPercent='.123'
$ fPercent='.345'
$ echo "$mPercent / 100 * .482 + $fPercent / 100 * .518" | bc -l
.00237996000000000000
メモ: expr
Bashの一部ではなく、スタンドアロンの実行可能ファイルであり、coreutilsパッケージの一部です。 RPMを使用するシステムでは、次の内容を見ることができます。
$ rpm -qf $(type -p /usr/bin/expr)
coreutils-8.21-13.fc19.x86_64
3.27のコメントにある2つの変数について提供されたデータを使用すると、次の結果が得られます。
$ mPercent='3.27'
$ fPercent='3.27'
$ echo "$mPercent / 100 * .482 + $fPercent / 100 * .518" | bc -l
.03270000000000000000
答え3
私の提案はbc
算術演算と<<<
(ここに文字列があります)に値を入力するために使用されますbc
。
$ mPercent=3.27
$ fPercent=3.27
$ bc -l <<< "$mPercent / 100 * .482 + $fPercent / 100 * .518"
.03270000000000000000
ここの-l
オプションを使用するbc
と、より多くの数学関数で浮動小数点演算を使用できます。