Как сравнить два значения с плавающей запятой в ksh?

Используйте подоболочку. Выполните команды в подоболочке и направьте вывод в свою программу.

(cat a; echo; cat b; tail -n+2 c) | ./myProgram
3
08.06.2017, 02:03
3 ответа

В соответствии со стандартом POSIX для bc:

В отличие от всех других операторов, реляционные операторы ( '<', '>', "<=", "> =", "==", "!=" ) допустимы только как объект оператора if, while или внутри оператора for.

По-видимому, это расширение GNU/Linux, позволяющее голым сравнениям оценивать истинность или ложность.

Вместо того, чтобы проверять вывод bc на 1 или 0, просто используйте test напрямую:

if [ 5.3 -ge 5.3 ]; then echo hi; else echo bye; fi

или используйте арифметическое расширение (ksh93):

if (( 5.3 >= 5.3 )); then echo hi; else echo bye; fi

или используйте awk:

if awk -v x=5.3 -v y=5.3 'BEGIN { exit (x >= y) ? 0 : 1 }'; then echo hi; else echo bye; fi
3
27.01.2020, 21:21

Вы также можете проверить значения следующим образом:

$ fat=5.3
$ slim=5.3
$ echo $fat'>'$slim | bc -l
0
$ echo $fat'>'$slim | bc -l
0
$ echo $fat'=='$slim |bc -l
1

Выход:0= ложь и 1= истина

0
27.01.2020, 21:21

Вы можете использовать утилиту dcдля выполнения mathв оболочке. Команда будет печатать от hiдо stdout, когда $n1 >= $n2, в противном случае будет отображаться bye.

n1=5.3 n2=5.3
dc -e "[[hi]]sa [r]sb $n1 $n2 !>a [bye] z2=bp"

       $n1  $n2   o/p
 1.    5.3, 5.3 => hi
 2.    5.3, 5.2 => hi
 3.    5.3, 5.4 => bye
0
27.01.2020, 21:21

Теги

Похожие вопросы