Unix コマンドは、減算後の最大浮動小数点値 2 を返します。

Unix コマンドは、減算後の最大浮動小数点値 2 を返します。

これは次のようになります。2つの数字の最小/最大値を求める質問です。しかし、浮動小数点数を使用して同じことをすることに興味があります。

だから基本的に使いたいシェル算術拡張三項演算子を使用しますが、整数でのみ機能します。

たとえば、2 つの数字から一部を減算し、結果が 0 より大きいことを確認し、そうでない場合は 0 より大きく設定したいとします。

整数

これはうまくいきます:

value=5
echo $(( $(bc <<< "$value - 10") > 0 ? $(bc <<< "$value - 10") : 1 ))

1期待どおりに返されます。

編む

ただし、浮動小数点比較に変換しようとすると機能しません。

value=0.5
echo $(( $(bc <<< "$value - 0.8") > 0 ? $(bc <<< "$value - 0.8") : 0.1 ))

エラーが発生します。

-bash: -.3 > 0 ? -.3 : 0.1 : syntax error: operand expected (error token is ".3 > 0 ? -.3 : 0.1 ")

bc正しい浮動小数点が返されますが、

$ echo $(bc <<< "$value - 0.8")
-.3

私はbashがこの種の浮動小数点比較を処理できないと思います。

上記のように、浮動小数点数の最小/最大値を取得する簡単な回避策はありますか?

答え1

bcいいですね。値を比較し、残りはシェルに実行させる単純な1行コードを考えました。

$ value=0.5
$ [ $(bc <<< "$value - 0.8 > 0") -eq 1 ] && echo $(bc <<< "$value - 0.8") || echo 0.1
0.1
$ [ $(bc <<< "$value - 0.2 > 0") -eq 1 ] && echo $(bc <<< "$value - 0.2") || echo 0.1
.3

またはbcそれ自体を使用してください。

v=0.5
bc <<< "if ($v-0.8>0) $v-0.8 else 0.1" # Result: .1
bc <<< "if ($v-0.2>0) $v-0.2 else 0.1" # Result: .3

関連情報