科学表記の2つの数字を含むif else文

科学表記の2つの数字を含むif else文

科学的表記法で2つの数字があり、bashのif文で2つの数字を比較したいと思います。これにより、bwlowなどのエラーが発生します。たとえば、次のようになります。

bash-4.2$ a=10e-12
bash-4.2$ b=12e-12
bash-4.2$ if (( a > b )); then r=1; else r=0; fi
bash: ((: 10e: value too great for base (error token is "10e")

a と b が整数の場合、同じ問題は発生しません。上記の説明を使用すると、浮動小数点数に問題があるようです。 if文で比較を実行する簡単な方法はありますか?

ベストアンサー1

「翼」を使う

@Theophrastusが上で指摘したように、科学的な表記はサポートされていませbashん。bc

簡単な比較と計算のために、次のものを使用することをお勧めしますawk(xEy番号を処理します)。

a=10e-12
b=12e-12

r=$(awk 'BEGIN{print ('$a'>'$b')?1:0}')
echo $r

より複雑な式では、awk変数をwithに渡すことで、面倒な引用符やエスケープを避けることができます-v。これは実際に好ましいアプローチです。

r=$(awk -v a="$a" -v b="$b" 'BEGIN{print (a<b)?1:0}')

「bc」を使う

シンボルを代替形式に再フォーマットする方法はいくつかあります。x * 10^yこれは理解できますがbc(または直接可能です)、負のbc指数に関してはいくつかの特徴があります(あなたの例のように):

$ bc
10^12
1000000000000
10^-12
0

おすすめ記事