web-dev-qa-db-ja.com

bashで浮動小数点演算を行う「無効な算術演算子」

ここに私のスクリプトがあります、それはかなり自明です:

_d1=0.003
d2=0.0008
d1d2=$((d1 + d2))

mean1=7
mean2=5
meandiff=$((mean1 - mean2))

echo $meandiff
echo $d1d2
_

しかし、私の意図した出力を取得する代わりに:0.0038 2エラーInvalid Arithmetic Operator, (error token is ".003")?を取得しています

14
John Smith

bashは、浮動小数点演算をサポートしていません。 bcのような外部ユーティリティを使用する必要があります。

# Like everything else in Shell, these are strings, not
# floating-point values
d1=0.003
d2=0.0008

# bc parses its input to perform math
d1d2=$(echo "$d1 + $d2" | bc)

# These, too, are strings (not integers)
mean1=7
mean2=5

# $((...)) is a built-in construct that can parse
# its contents as integers; valid identifiers
# are recursively resolved as variables.
meandiff=$((mean1 - mean2))
32
chepner

浮動小数点の精度が必要ない場合は、単に小数部分を取り除くことができます。

echo $var | cut -d "." -f 1 | cut -d "," -f 1

値の整数部分を切り取ります。カットを2回使用する理由は、地域の設定でドットを使用して小数点を区切り、他の一部がコンマを使用する可能性がある場合に整数部分を解析するためです。

0
MTSan

使用しているシェルを変更できます。 bashシェルでスクリプトを実行している場合bash scriptname.shスクリプトの実行にkshを使用してみてください。 Bashは、浮動小数点数を含む算術演算をサポートしていません。

0
Karan Saxena