科学的表記法で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