POSIX浮動小数点比較

POSIX浮動小数点比較

従来のシステムを使用してここでsqlplusを連結して戻り値を変数に保存しましたが、うまく機能しますが、a numeric/floating comparison現時点では浮動小数点値と戻り値を比較するときの問題は0.052または0.0032または整数値です. Bashはfloatの比較をサポートしておらず、POSIXではbcもサポートしていません。

isubsCount=$( sqlplus -s user/pass <<-EOF
    set pagesize 0;
    set feedback off;
    set verify off;
    set heading off echo off;
    select  to_char((Max(start_time_timestamp+ (2/24))- p.port_statusmoddat), 999.999) Diff
    from  test
    exit;
EOF )


if [ ${isubsCount%.*} -ge 1 ]; then

echo yes

fi

私もこれを試しましたが、うまくいきません。

if (( $(echo "$isubsCount >= 1" |bc -l) )); then

echo yes

fi

答え1

これは、awkを使用するすべてのUNIXシステムのすべてのシェルで機能します。

$ isubsCount=0.052
$ awk -v val="$isubsCount" 'BEGIN{exit !(val >= 1)}'
$ echo $?
1
$ if awk -v val="$isubsCount" 'BEGIN{exit !(val >= 1)}'; then echo "yes"; else echo "no"; fi
no

$ isubsCount=1
$ awk -v val="$isubsCount" 'BEGIN{exit !(val >= 1)}'
$ echo $?
0
$ if awk -v val="$isubsCount" 'BEGIN{exit !(val >= 1)}'; then echo "yes"; else echo "no"; fi
yes

exit !(val >= 1)明らかに、同じ結果を得るために終了ステートメントをtoから変更することはできますが、exit (val < 1)実際にテストしたい条件とは反対の条件を作成せずに、目的の終了ステータスを取得する方法を示すために作成しました。

関連情報