Я знаю, что это действительно глупый вопрос, но я не знаю, как это сделать в bash:
20 / 30 * 100
Должно быть 66.67
, но expr говорит 0
, потому что не поддерживает float. Какая команда в Linux может заменить expr и выполнить это уравнение?
Я знаю, что это действительно глупый вопрос, но я не знаю, как это сделать в bash:
20 / 30 * 100
Должно быть 66.67
, но expr говорит 0
, потому что не поддерживает float. Какая команда в Linux может заменить expr и выполнить это уравнение?
Как сообщается на странице руководства bash:
The shell allows arithmetic expressions to be evaluated, under certain circumstances...Evaluation is done in fixed-width integers with no check for overflow, though division by 0 is trapped and flagged as an error.
Вы можете умножить на 100 раньше, чтобы получить лучший частичный результат:
let j=20*100/30
echo $j
66
Или на большее число, кратное 10, и представьте десятичный разряд, которому он принадлежит:
let j=20*10000/30
echo $j
66666
bc
сделает это за вас, но важен порядок.
> echo "scale = 2; 20 * 100 / 30" | bc
66.66
> echo "scale = 2; 20 / 30 * 100" | bc
66.00
или, для вашего конкретного случая:
> export ach_gs=2
> export ach_gs_max=3
> x=$(echo "scale = 2; $ach_gs * 100 / $ach_gs_max" | bc)
> echo $x
66.66
Какой бы метод вы ни выбрали, его можно включить в качестве функции, облегчающей вашу жизнь:
#!/bin/bash
function pct () {
echo "scale = $3; $1 * 100 / $2" | bc
}
x=$(pct 2 3 2) ; echo $x # gives 66.66
x=$(pct 1 6 0) ; echo $x # gives 16
Обычно я использую perl:
perl -e 'print 10 / 3'
perl -e 'print "hello world"'
тоже не работает. Но perl -e 'print "hello world\n"'
работает как положено.
- person Sébastien; 31.05.2014
, "\n"
в конец выражения: perl -e 'print 10 / 3, "\n"'
- person pgl; 02.06.2014
python -c "print 10.0/3.0"
- person emazzotta; 18.12.2015
просто сделай это в awk
# awk 'BEGIN{print 20 / 30 * 100}'
66.6667
сохранить в переменную
# result=$(awk 'BEGIN{print 20 / 30 * 100}')
# echo $result
66.6667
> echo "20 / 30 * 100" | bc -l
66.66666666666666666600
Это упрощение ответа paxdiablo. Параметр -l устанавливает масштаб (количество знаков после запятой) равным 20. Он также загружает математическую библиотеку с триггерными функциями и другими вещами.
Еще один очевидный вариант:
python -c "print(20 / 30 * 100)"
если вы используете Python 3. В противном случае используйте python3
.