Использование echo "20+5"
буквально производит текст " 20+5
".
Какую команду я могу использовать, чтобы получить числовую сумму, 25
в этом случае?
Кроме того, какой самый простой способ сделать это, просто используя bash для чисел с плавающей запятой? Например, echo $((3224/3807.0))
печатает 0
:(.
Я ищу ответы, используя либо саму базовую командную оболочку («командную строку»), либо используя языки, доступные из командной строки.
shell
command-line
arithmetic
floating-point
calculator
Майкл Даррант
источник
источник
bc
, возможно, стоит прочитать об этой-l
опции на странице руководства.Ответы:
Вариантов много !!!
Резюме
подробности
ракушки
Вы можете использовать арифметическое расширение POSIX для целочисленной арифметики
echo "$((...))"
:Довольно переносимый (
ash dash yash bash ksh93 lksh zsh
):используя возможность printf для печати плавающих чисел, мы можем расширить большинство оболочек для выполнения математических операций с плавающей точкой, хотя и с ограниченным диапазоном (не более 10 цифр):
ksh93
,yash
иzsh
сделать поддержку плавает здесь:только
ksh93
(напрямую) иzsh
загрузка библиотеки mathfunc здесь:(
zsh
необходимо загрузить,zmodload zsh/mathfunc
чтобы получить функции, какatan
).Интерактивно с Zsh:
С (t) csh (только целое число):
В семействе
rc
оболочекakanga
есть арифметическое расширение:POSIX Toolchest
bc
(см. ниже для интерактивного режима), руководство здесьMnemonic: best calculator (хотя на
b
самом деле он базовый ).(поддерживает произвольные числа точности)
Интерактивный режим до н.э .:
Решение Rush ,
expr
(без интерактивного режима):Решение Джошуа :
awk
(без интерактивного режима):Другие более или менее портативные инструменты
Решение Arcege ,
dc
(интерактивный режим :)dc
:Который еще более забавен, так как это работает обратной польской нотацией.
Но не так практично, если вы не много работаете с обратной польской нотацией.
Обратите внимание, что это
dc
предшествовалоbc
иbc
было исторически реализовано как оболочка,dc
ноdc
не было стандартизировано POSIXDQdims «s
calc
(требуетсяsudo apt-get install apcalc)
:Языковые переводчики общего назначения:
manatwork решение «с,
node
(интерактивный режим:node
; функция вывода не требуется):Perl (интерактивный режим:)
perl -de 1
:Python (интерактивный режим:
python
функция вывода не нужна):Также поддерживает произвольные числа точности:
Если вы
clisp
установили, вы также можете использовать польскую запись:Решение Марко ,
lua
(интерактивный режим:)lua
:PHP (интерактивный режим:)
php -a
:Ruby (интерактивный режим:
irb
функция вывода не нужна):Guile (интерактивный режим :)
guile
:S-Lang (интерактивный режим:
slsh
функция вывода не нужна, только;
терминатор):Tcl (интерактивный режим:
tclsh
функция вывода не нужна, ноexpr
есть):Javascript оболочки:
Различные SQL:
SQLite (интерактивный режим:)
sqlite3
:MySQL :
PostgreSQL :
Опции на mysql и postgres останавливают образ «ascii art»!
Специализированные математические языки:
R в обычном режиме - позволяет сгенерировать 1000 нормальных случайных чисел, получить стандартное отклонение и распечатать его
R, используя скрипт Литтлера - позволяет напечатать число в квадрате
PARI / GP , обширная система компьютерной алгебры для теории чисел, линейной алгебры и многих других
GNU Octave (интерпретируемый язык высокого уровня, в основном предназначенный для численных расчетов)
Также поддерживает комплексные числа:
Юлия , высокопроизводительный язык и переводчик для научных и численных вычислений.
Неинтерактивная опция:
источник
whatis bc
->An arbitrary precision calculator language
интересно! Спасибо!dc
, что еще более увлекательно, так как он работает по обратной польской записи.echo 20 5 + p | dc
Но не так практично, если вы не много работаете с обратной польской нотацией.## Command line calculator calc () { bc -l <<< "$@" }
math
Пока мы говорим, они работают над своим новым встроенным (или как он там сейчас называется). Не стесняйтесь редактировать. Это не мой ответ, а вики сообщества.Есть много способов для расчета. Для простых выражений вы можете использовать
bash
себя:или
expr
:А для сложных случаев есть отличный инструмент
bc
:Кстати, bc может вычислить даже очень сложное выражение с корнями, логарифмами, cos, sin и так далее.
источник
expr
вариант в принятый ответ. Пришлось выбрать один, чтобы принять и централизовать.expr 20+5
. Вам необходимо ввести пробел между числами и плюс , чтобы сделать его работу:expr 20 + 5
. Это важноУпомянутые решения хороши для очень простых вычислений, но очень подвержены ошибкам. Примеры:
Синтаксическая ошибка, подобная последней, легко заметна, но целочисленные ответы с отброшенной частью с плавающей запятой могут легко остаться незамеченными и привести к неправильным результатам.
Вот почему я всегда использую язык сценариев, например, Lua. Но вы можете выбрать любой язык сценариев, который вам знаком. Я просто использую Lua в качестве примера. Преимущества
Примеры:
источник
bc
результат не является целым числом, просто округляется доscale
значения по умолчанию, равного 0. Так что,bc <<< 'scale=4;9.0/2.0'
если вы хотите дробную часть.scale
ли яbc
через пару недель? Возможно нет. И даже если есть способ изменить его навсегда, он укусит вас, если вы используете систему с настройками по умолчанию.scale
как я встретилсяbc
впервые много лет назад. Но я всегда забыл ли выход функцияlua
являетсяput
илиputs
. ;)bc -l
а не простоbc
, тогда никогда не беспокойтесьscale
.Никто еще не упомянул awk?
Используя функции оболочки POSIX и математическую силу awk, просто определите эту (одну строку) функцию:
Затем просто выполните такие вещи, как
calc 1+1
илиcalc 5/2
Примечание. Чтобы функция всегда была доступна, добавьте ее в ~ / .bashrc (или в файл запуска вашей соответствующей оболочки)
Конечно, небольшой скрипт с именем «calc» со следующим содержанием:
также может работать.
источник
a=0; b=0.0; if echo "$a" "$b" | awk '{ exit ($1 == $2) ? 0 : 1 }'; then echo 'equals'; else echo 'not equals'; fi
Вы могли бы использовать
bc
. Например,В качестве альтернативы
bc <<< 25+5
также будет работать.Или в интерактивном режиме, если вы хотите сделать больше, чем просто один простой расчет:
Реализация GNU
bc
печатает эту информацию заголовка / авторского права при запуске, когда оба его stdin и stdout идут в терминал. Вы можете подавить его с помощью-q
опции (GNU-specific) . Для получения дополнительной информации см. Справочную страницу bc.источник
ctrl-d
выход?quit
c () { bc -l <<< "$@" }
определит функциюc
для быстрого и удобного использования. напримерc 3/2
, даст вам1.50000000000000000000
. Ссылка в приведенном выше описании, как это сделать, мертва.Вы можете использовать
calc
:Если вы просто вводите
calc
без других аргументов, он входит в интерактивный режим, в котором вы можете просто продолжать заниматься математикой. Вы выходите из этого, набирая выход:Или вы используете его с выражением в качестве аргумента, и он даст ответ, а затем выйти
calc
похоже наbc
, мне просто нравится, как он ведет себя по умолчанию лучшеисточник
calc -e '2+4; 3+5; 3.4+5; 2^4
печатать 4 выходные строки или простоcalc -e 33+(3^3)
.. +1 Мне нравится идея использовать что-то под названием «calc» для калькулятора :)-e
опция не нужна, когда есть только одно выражение ... аккуратно! ..Мне нравится запускать Python и использовать его как интерактивный калькулятор (но опять же, я программист на Python).
источник
screen
только при запуске Python.Поскольку никто другой не упомянул об этом, и хотя это не является строго калькулятором (но не все эти языки сценариев общего назначения), я хотел бы упомянуть
units
:Или, для меньшего количества вывода, так что вы можете получить только номер, чтобы использовать его
$()
для присвоения чего-либо:И это даже делает преобразование температуры
Чтобы получить преобразование температуры в выражении для дальнейшего расчета, сделайте это:
источник
Кроме того
ghci
, это компилятор Глазго-Хаскелла в интерактивном режиме (ghc --interactive
в отличие от оценки выражения с помощью-e
), создает восхитительный «калькулятор»:источник
ghc
Глазго Компилятор Haskell?Я не могу поверить, что я читал «силу JavaScript» (но мне пришлось поднять ответ для других частей, кроме, конечно, Perl.
Практически, для простых случаев, когда целочисленной арифметики достаточно, я использую buildin $ ((...)) и рекомендую его. Иначе, почти во всех случаях эхо "..." | Bc достаточно.
Для некоторых арифметических операций, таких как статистика, матричные операции и т. Д.,
R
Лучший инструмент:и для небольших наборов данных и графических результатов,
oocalc
это хорошая утилита.источник
Я использую небольшой скрипт Python, который оценит выражение Python и напечатает результат, а затем я могу запустить что-то вроде
скрипт такой:
К сожалению, я не помню, откуда я позаимствовал большую часть кода, поэтому не могу его процитировать.
источник
print(eval(' '.join(sys.argv[1:])))
сделал бы то же самое?Gnuplot
gnuplot - интерактивная программа построения графиков.
Перейдите по указанной выше ссылке или введите
gnuplot
форму приглашения, а затемhelp
винтерпретаторе gnuplot .Gnuplot - это программа, созданная для построения графиков данных, но ее также можно использовать для расчетов. Преимущество в том, что вы можете определять функции и / или использовать встроенные.
Root (или другой интерпретатор C )
Вы можете использовать его в качестве C переводчика , CINT , или вы можете использовать один из многих многих других интерпретаторов C . ИМХО, он огромный, сложный, мощный, и не всегда дружелюбный, но тоже может доставить большое удовольствие.
Если вы действительно не хотите слушать тихий голос внутри себя, который цитирует Конфуцио, и вы готовы разбить (сливочное масло) мушку на колесе, вы можете использовать root . В этом случае
-l
обязательно избегать показа заставки ...источник
Для целочисленной арифметики (где 3/2 = 1)
bash
echo $(( 1+1 ))
fish
math 1+1
zsh*
echo $((1+1))
*: и ksh93, yash
Для арифметики с плавающей точкой (где 3/2 = 1,5)
bash
awk "BEGIN {print 10/3}"
(низкая точность)bash
echo "10/3"|bc -l
(высокая точность)fish
math -s4 10/3
zsh*
echo $((10./3))
*: и ksh93, yash
Конечно, вы можете настроить свою оболочку на использование awk с минимальным набором текста, как
calc 10/3
(см. Примечания о том, как это сделать для bash 1 и fish 2 ).Основная причина использования awk для bash заключается в том, что он предустановлен почти на всех Unix-подобных ОС и является достаточно легким (конечно, это стоит затрат на запуск процесса) с менее точным, но более удобным для пользователя выводом, чем тот,
bc -l
который печатает 20 десятичных знаков. цифры (хотя вы можете, конечно, настроить awk, чтобы получить больше десятичных цифр ).Примечания
(1) Как использовать упрощенный синтаксис в bash
Добавьте эту функцию bash к вашему
~/.bashrc
:(2) Как использовать упрощенный синтаксис в рыбе
Создайте функцию
calc
fish (т.е. текстовый файл с именем/home/ndemou/.config/fish/functions/calc.fish
):источник
awk
будет использоватьdouble
тип с плавающей запятой в вашей системе , поэтому он будет таким же точным, как и большинство других инструментов, которые не имеют произвольной точности (обратите внимание, что gawk может делать произвольную точность).awk
используетOFMT
переменную для преобразования числа в их строковое представление для вывода (%.6g
по умолчанию вы можете изменить его на%.17g
более высокую точность ).fish
«smath
это просто функция , которая вызываетbc
(хотя это изменить )bc
. Это больше не в новых версиях, где такие вещиmath "scale=4; 10/3"
больше не будут работать (math -s4 10/3
вместо этого сейчас)math -s4
кажется, поддерживается и в более старых версиях)Для консольных расчетов я использую
concalc
. (sudo aptitude install concalc
)После этого просто введите
concalc
и нажмите Enter. Он не будет выдавать подсказку, но просто введите ваш расчет (без пробелов) и нажмите ввод, и на следующей строке вы получите числовое значение.источник
SQLite :
MySQL :
PostgreSQL :
источник
from dual
требуется Oracle, MySQL можетselect
безfrom
оговорок. 2) PostgreSQL не требует псевдонима. 3);
Требуется только для SQLite. 4) MySQL и PostgreSQL будут работать, только если они смогут подключиться к серверу базы данных. 5) MySQL и PostgreSQL нарисуют таблицу ASCII-art вокруг результатов. Чтобы получить только значение:mysql -BNe 'select 1+1'
иpsql -tAc 'select 1+1
.Используйте арифметическую библиотеку GNU Multiple Precision через прилагаемую
run-expr
программу:tar -xvf gmp-5.1.3.tar.lz
./configure
иmake
(не нужно устанавливать)make run-expr
~/bin
каталоге:ln -s /path/to/gmp/demos/expr/run-expr ~/bin/run-expr
alias calcf='run-expr -f'
для оценки с плавающей запятойВыход:
Из
run-expr.c
файла:См. Руководство для различий классов функций и деталей.
источник