Usar echo "20+5"
literalmente produz o texto " 20+5
".
Que comando posso usar para obter a soma numérica, 25
neste caso?
Além disso, qual é a maneira mais fácil de fazer isso usando o bash para ponto flutuante? Por exemplo, echo $((3224/3807.0))
imprime 0
:(.
Estou procurando respostas usando o próprio shell de comando básico ('linha de comando') ou usando os idiomas disponíveis na linha de comando.
shell
command-line
arithmetic
floating-point
calculator
Michael Durrant
fonte
fonte
bc
, pode valer a pena ler sobre a-l
opção na página de manual.Respostas:
Existem muitas opções !!!
Sumário
Detalhes
Cartuchos
Você pode usar a expansão aritmética POSIX para aritmética inteira
echo "$((...))"
:Bastante portátil (
ash dash yash bash ksh93 lksh zsh
):Usando a capacidade printf para imprimir carros alegóricos, podemos estender a maioria dos shells para fazer matemática de ponto flutuante, embora com um intervalo limitado (não mais que 10 dígitos):
ksh93
,yash
ezsh
suporta flutuadores aqui:somente
ksh93
(diretamente) ezsh
carregando a biblioteca mathfunc aqui:(
zsh
precisa carregarzmodload zsh/mathfunc
para obter funções comoatan
).Interativamente com zsh:
Com (t) csh (apenas número inteiro):
Na
rc
família shell,akanga
é aquele com expansão aritmética:Ferramentas POSIX
bc
(veja abaixo o modo interativo), manual aquiMnemonic: best calculator (embora o
b
é de fato para básico ).(suporta números de precisão arbitrários)
modo interativo bc:
Solução do Rush ,
expr
(sem modo interativo):Solução de Josué :
awk
(sem modo interativo):Outras ferramentas mais ou menos portáteis
A solução da Arcege
dc
(modo interativo :)dc
:O que é ainda mais divertido, pois funciona com notação polonesa reversa.
Mas não é tão prático, a menos que você trabalhe muito com a notação de polimento reverso.
Observe que
dc
é anteriorbc
ebc
foi historicamente implementado como um invólucro,dc
masdc
não foi padronizado pelo POSIXDQdims '
calc
(obrigatóriosudo apt-get install apcalc)
:Intérpretes de linguagem de uso geral:
solução do manatwork ,
node
(modo interativo :;node
função de saída não necessária):Perl (modo interativo:)
perl -de 1
:Python (modo interativo
python
:; função de saída não necessária):Também suporta números de precisão arbitrários:
Se você
clisp
instalou, também pode usar a notação de polonês:A solução de Marco
lua
(modo interativo:)lua
:PHP (modo interativo:)
php -a
:Ruby (modo interativo
irb
:; função de saída não necessária):Guile (modo interativo:)
guile
:S-Lang (modo interativo
slsh
:; função de saída não necessária, apenas um;
terminador):Tcl (modo interativo
tclsh
:; função de saída não é necessária, masexpr
é):Cascas Javascript :
Vários SQL's:
SQLite (modo interativo:)
sqlite3
:MySQL :
PostgreSQL :
_As opções no mysql e no postgres interrompem a imagem 'ascii art'!
Linguagens especializadas em matemática:
R no modo simples - vamos gerar 1000 números aleatórios normais, obter o desvio padrão e imprimi-lo
R usando o script littler - permite imprimir pi ao quadrado
PARI / GP , um extenso sistema de álgebra computacional para teoria dos números, álgebra linear e muitas outras coisas
Oitava GNU (uma linguagem interpretada de alto nível, destinada principalmente a cálculos numéricos)
Também suporta números complexos:
Julia , linguagem de alto desempenho e intérprete para computação científica e numérica.
Opção não interativa:
fonte
whatis bc
->An arbitrary precision calculator language
Interessante! Obrigado!dc
, o que é ainda mais divertido, pois funciona por notação de polimento reverso.echo 20 5 + p | dc
Mas não é tão prático, a menos que você trabalhe muito com a notação de polimento reverso.## Command line calculator calc () { bc -l <<< "$@" }
math
prédio (ou como é chamado agora) enquanto falamos. Sinta-se livre para editar. Não é minha resposta e é um wiki da comunidade.Existem muitas maneiras de calcular. Para expressões simples, você pode usar-
bash
se:ou
expr
:E para casos complexos, há uma ótima ferramenta
bc
:Btw, bc pode calcular até expressões muito complexas com raízes, logaritmos, cos, sin e assim por diante.
fonte
expr
opção à resposta aceita. Tinha que escolher um para aceitar e centralizar.expr 20+5
. Você precisa digitar espaços entre os números e mais para fazer o trabalho:expr 20 + 5
. Isso é importante.As soluções mencionadas são adequadas para cálculos muito simples, mas muito propensas a erros. Exemplos:
Um erro de sintaxe como os últimos é facilmente percebido, mas respostas inteiras com uma parte flutuante descartada podem facilmente passar despercebidas e levar a resultados incorretos.
É por isso que eu sempre uso uma linguagem de script como Lua para isso. Mas você pode escolher qualquer linguagem de script familiar. Eu apenas uso Lua como exemplo. As vantagens são
Exemplos:
fonte
bc
O resultado de não é inteiro, apenas arredondado parascale
, cujo valor padrão é 0. Portanto,bc <<< 'scale=4;9.0/2.0'
se você deseja a parte fracionária.scale
se usarbc
em algumas semanas? Provavelmente não. E mesmo que haja uma maneira de alterá-lo permanentemente, ele o morderá se você estiver em um sistema com as configurações padrão.scale
desde que conheci abc
primeira vez anos atrás. Mas eu sempre esqueci se a função de saídalua
éput
ou nãoputs
. ;)bc -l
vez de simplesmentebc
, e nunca se preocupescale
.Ninguém mencionou awk ainda?
Usando funções shell POSIX e awk math power, basta definir esta função (uma linha):
Em seguida, basta executar coisas como
calc 1+1
oucalc 5/2
Nota: Para tornar a função sempre disponível, adicione-a em ~ / .bashrc (ou no arquivo de inicialização do seu shell correspondente)
Obviamente, um pequeno script chamado "calc" com o seguinte conteúdo:
também poderia funcionar.
fonte
a=0; b=0.0; if echo "$a" "$b" | awk '{ exit ($1 == $2) ? 0 : 1 }'; then echo 'equals'; else echo 'not equals'; fi
Você poderia usar
bc
. Por exemplo,Alternativamente
bc <<< 25+5
, também funcionará.Ou interativamente, se você quiser fazer mais do que apenas um único cálculo simples:
A implementação GNU de
bc
imprime essas informações de cabeçalho / direitos autorais na inicialização quando stdin e stdout vão para um terminal. Você pode suprimi-lo com a opção (específica ao GNU)-q
. Para mais informações, consulte a página de manual bcfonte
ctrl-d
sai?quit
c () { bc -l <<< "$@" }
definirá uma funçãoc
para uso rápido e fácil. por exemploc 3/2
, lhe dará1.50000000000000000000
. O link acima descreve como fazer isso está inoperante.Você pode usar
calc
:Se você simplesmente entrar
calc
sem outros argumentos, ele entra em um modo interativo, onde você pode continuar fazendo contas. Você sai dessa digitando exit:Ou você a usa com a expressão como argumento e ela fornecerá a resposta e sairá
calc
é semelhante abc
, eu apenas gosto da maneira como ele se comporta como padrão melhorfonte
calc -e '2+4; 3+5; 3.4+5; 2^4
imprime 4 linhas de saída ou apenascalc -e 33+(3^3)
.. +1 Eu gosto da idéia de usar algo chamado 'calc' para uma calculadora :)-e
opção não é necessária quando há apenas uma expressão ... puro ..!Eu gosto de iniciar o Python e usá-lo como uma calculadora interativa (mas, novamente, sou um programador de Python).
fonte
screen
apenas executando o Python.Como ninguém mais o mencionou, e embora não seja estritamente uma calculadora (mas nem todas essas linguagens de script de uso geral), eu gostaria de mencionar
units
:Ou, para menos saída, você pode obter apenas o número para usar
$()
e atribuir a algo:E até faz conversões de temperatura
Para obter a conversão de temperatura em uma expressão para cálculo adicional, faça o seguinte:
fonte
Além disso
ghci
, esse é o compilador Glasgow-Haskell no modo interativo (ghc --interactive
ao contrário de avaliar uma expressão com-e
), cria uma "calculadora" fascinante:fonte
ghc
significa Glasgow Haskell Compiler?Não posso acreditar em ler "o poder do JavaScript" (mas tive que aprovar a resposta para as outras partes, exceto o perl, é claro).
Na prática, nos casos simples em que a aritmética inteira é suficiente, eu uso o buildin $ ((...)) e o recomendo. Senão, em quase todos os casos ecoam "..." | bc é suficiente.
Para algumas operações aritméticas, como estatísticas, operações de matriz e mais,
R
é a melhor ferramenta:e para pequenos conjuntos de dados e resultados gráficos de descarte,
oocalc
é um bom utilitário.fonte
Eu uso um pequeno script python que avaliará uma expressão python e imprimirá o resultado, para que eu possa executar algo como
o script é:
Infelizmente, não me lembro de onde peguei emprestado a maior parte do código, então não posso citá-lo.
fonte
print(eval(' '.join(sys.argv[1:])))
faria a mesma coisa?Gnuplot
gnuplot - um programa de plotagem interativo
Siga o link acima ou digite o
gnuplot
formulário no prompt e depoishelp
dentro dointerpretador gnuplot .O Gnuplot é um programa criado para plotar dados, mas também pode ser usado para o cálculo. Oferece a vantagem de poder definir funções e / ou usar as incorporadas.
Raiz (ou algum outro intérprete C )
Você pode usá-lo como intérprete C , CINT , ou pode usar um dos muitos outros intérpretes C . IMHO, é enorme, complexo, poderoso e nem sempre amigável, mas também pode dar uma grande satisfação.
Se você realmente não quer ouvir a vozinha dentro de você que cita Confúcio e está pronto para quebrar uma mosca (manteiga) na roda, você pode usar a raiz . Nesse caso,
-l
é obrigatório evitar mostrar a tela inicial ...fonte
Para aritmética de número inteiro (onde 3/2 = 1)
bash
echo $(( 1+1 ))
fish
math 1+1
zsh*
echo $((1+1))
*: e ksh93, yash
Para aritmética de ponto flutuante (onde 3/2 = 1,5)
bash
awk "BEGIN {print 10/3}"
(baixa precisão)bash
echo "10/3"|bc -l
(alta precisão)fish
math -s4 10/3
zsh*
echo $((10./3))
*: e ksh93, yash
Obviamente, você pode configurar seu shell para usar o awk com o mínimo de digitação
calc 10/3
(consulte as notas sobre como fazê-lo para o bash 1 e o fish 2 ).A principal razão para sugerir o awk para o bash é que ele é pré-instalado em quase todos os sistemas operacionais semelhantes ao Unix e é razoavelmente leve (é claro que existe o custo de iniciar um processo) com uma saída menos precisa, mas mais amigável ao homem do
bc -l
que imprime 20 decimais dígitos (embora você certamente possa ajustar o awk para obter mais dígitos decimais ).Notas
(1) Como usar a sintaxe simplificada no bash
Adicione esta função bash ao seu
~/.bashrc
:(2) Como usar a sintaxe simplificada em peixes
Crie uma
calc
função de peixe (ou seja, um arquivo de texto chamado/home/ndemou/.config/fish/functions/calc.fish
):fonte
awk
usará odouble
tipo de ponto flutuante do seu sistema , portanto, será tão preciso quanto a maioria das outras ferramentas que não fazem precisão arbitrária (observe que o gawk pode fazer precisão arbitrária).awk
usa aOFMT
variável para converter o número em sua representação de seqüência de caracteres para saída (%.6g
por padrão, convém alterar isso para que%.17g
você queira maior precisão ).fish
'smath
é apenas uma função que chamabc
(embora isso é para mudar )bc
. Já não está nas versões mais recentes, onde coisas comomath "scale=4; 10/3"
não funcionam mais (math -s4 10/3
agora)math -s4
parece ser suportado em versões mais antigas também)Para cálculos de console, eu uso
concalc
. (sudo aptitude install concalc
)Depois disso, basta digitar
concalc
e pressionar enter. Ele não fornecerá um prompt, mas apenas digite seu cálculo (sem espaços) e pressione enter e, na próxima linha, fornecerá o valor numérico.fonte
SQLite :
MySQL :
PostgreSQL :
fonte
from dual
são necessários pelo Oracle, o MySQL é capazselect
semfrom
cláusula. 2) O PostgreSQL não requer o alias. 3) Isso;
é requerido apenas pelo SQLite. 4) O MySQL e o PostgreSQL funcionarão apenas se puderem se conectar a um servidor de banco de dados. 5) MySQL e PostgreSQL desenharão a tabela ASCII-art em torno dos resultados. Para obter apenas o valor:mysql -BNe 'select 1+1'
epsql -tAc 'select 1+1
.Use a Biblioteca Aritmética de Precisão Múltipla GNU através do
run-expr
programa fornecido :tar -xvf gmp-5.1.3.tar.lz
./configure
emake
(não é necessário instalar)make run-expr
~/bin
diretório:ln -s /path/to/gmp/demos/expr/run-expr ~/bin/run-expr
alias calcf='run-expr -f'
para avaliação de ponto flutuanteResultado:
Do
run-expr.c
arquivo:Consulte o manual para obter diferenças e detalhes das classes de funções.
fonte