Арифметические проблемы Баша

установить gThumb (sudo apt-get install gthumb)

выполнить gThumb

выбрать несколько изображений

щелкнуть правой кнопкой мыши и выбрать печать

[ ! d4]

выбрать вкладку изображения

увеличить Строки и Coulms

1
задан 17 September 2016 в 07:49

3 ответа

Bash не очень хорошо справляется с такой арифметикой ... Вот ваша проблема:

$ echo $((1/5))
0
$ echo $((2/5))
0
$ echo $((4/5))
0
$ echo $((4/5))
0

Если вам нужно обрабатывать нецелые значения, вы можете использовать bc

$ max=5; for e in $(seq 1 1 "$max"); do percent=$(bc <<< "scale=1 ; $e/$max*100") ; echo "echo $e / $max : = ${percent%.*}"; done
echo 1 / 5 : = 20
echo 2 / 5 : = 40
echo 3 / 5 : = 60
echo 4 / 5 : = 80
echo 5 / 5 : = 100

(благодаря @Arronical для указания того, как форматировать вывод как целые числа)

16
ответ дан 23 May 2018 в 06:06
  • 1
    Я обязательно посмотрю на это, еще раз спасибо! – Cybex 16 September 2016 в 10:20
  • 2
    Вы можете обрезать .0 с выхода, изменив $percent в вашем эхо на ${percent%.*} :) – Arronical 16 September 2016 в 14:26

В отличие от bash, awk предлагает полную арифметику с плавающей запятой. Например:

$ awk -v max=5 'BEGIN{for (e=1;e<=max;e++) print "echo " e " / " max " : = " 100*e/max}' 
echo 1 / 5 : = 20
echo 2 / 5 : = 40
echo 3 / 5 : = 60
echo 4 / 5 : = 80
echo 5 / 5 : = 100
11
ответ дан 23 May 2018 в 06:06

Попробуйте

percent=$(( $e*100/$max ))

:)

См. раздел ARITHMETIC EVALUATION:

man bash

Он поддерживает только целое число.

6
ответ дан 23 May 2018 в 06:06

Другие вопросы по тегам:

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