浮動小数点値を使用するスクリプトがありますが、何らかの理由で 2 つの浮動小数点数を減算できません。
これはサンプルコードです
#!/bin/bash
p="1"
h="10"
m=$(echo "3.5"| bc -l)
for (( c=$p; c<=$h; c++ ))
do
r=$(echo "($p-$m)"| bc -l)
echo "Z $c $m $r"
done
そしてこれが結果です
Z 1 3.5 -2.5
Z 2 3.5 -2.5
Z 3 3.5 -2.5
Z 4 3.5 -2.5
Z 5 3.5 -2.5
Z 6 3.5 -2.5
Z 7 3.5 -2.5
Z 8 3.5 -2.5
Z 9 3.5 -2.5
Z 10 3.5 -2.5
答え1
行を変更する
r=$(echo "($p-$m)"| bc -l)
に
r=$(echo "($c-$m)"| bc -l)
実際はそうではありません$p
が、$c
ループによって変更されます。
答え2
bash
浮動小数点演算をサポートしていません。POSIXLyksh
では、どちらも次のようにzsh
使用できます。bc
フロリアンの答え示唆する、またはawk
。例えば、
$ awk 'BEGIN{print 2.5+3.7}'
6.2
Ubuntu には、浮動小数点計算を実行するのに十分な能力を備えた とPython
も付属しています。Perl
$ perl -le 'print(2.5+3.7)'
6.2
$ python3 -c 'print(2.5+3.7)'
6.2
他のオプションの広範なリストも参照してください:bash または他の言語/フレームワークで整数と浮動小数点の計算を行うにはどうすればよいでしょうか?
また、POSIX シェル言語標準算術展開では$((...))
:
符号付き長整数演算のみが必要です...拡張機能として、シェルはリストされている以外の演算式を認識する場合があります。
したがって、およびからの浮動小数点演算の省略はbash
、/bin/dash
POSIX 仕様に準拠しています。
答え3
遅くなりましたが、Google に結果が表示されたので、誰かがこれを読むかもしれません。解決策は、「$a- $b」と書くことです。スペースを入れるとうまくいきます。