Usar echo "20+5"
literalmente produce el texto " 20+5
".
¿Qué comando puedo usar para obtener la suma numérica, 25
en este caso?
Además, ¿cuál es la forma más fácil de hacerlo simplemente usando bash para coma flotante? Por ejemplo, echo $((3224/3807.0))
imprime 0
:(.
Estoy buscando respuestas utilizando el comando básico ('línea de comando') en sí mismo o mediante el uso de idiomas que están disponibles en la línea de comando.
shell
command-line
arithmetic
floating-point
calculator
Michael Durrant
fuente
fuente
bc
, puede valer la pena leer sobre la-l
opción en la página del manual.Respuestas:
¡¡¡Hay muchas opciones!!!
Resumen
Detalles
Conchas
Puede usar la expansión aritmética POSIX para la aritmética de enteros
echo "$((...))"
:Totalmente portátil (
ash dash yash bash ksh93 lksh zsh
):Al usar la capacidad printf para imprimir flotantes, podemos extender la mayoría de las conchas para hacer cálculos de coma flotante, aunque con un rango limitado (no más de 10 dígitos):
ksh93
,yash
yzsh
admite flotadores aquí:solo
ksh93
(directamente) yzsh
cargando la biblioteca mathfunc aquí:(
zsh
necesita cargarzmodload zsh/mathfunc
para obtener funciones comoatan
).Interactivamente con zsh:
Con (t) csh (solo entero):
En la
rc
familia de shell,akanga
es el que tiene expansión aritmética:POSIX toolchest
bc
(ver abajo para el modo interactivo), manual aquíMnemónico : bes calculador (aunque
b
de hecho es básico ).(admite números de precisión arbitrarios)
modo interactivo de bc:
La solución de Rush
expr
(sin modo interactivo):Solución de Joshua :
awk
(sin modo interactivo):Otras herramientas más o menos portátiles
La solución de Arcege ,
dc
(modo interactivo :)dc
:Lo cual es aún más divertido ya que funciona mediante notación de pulido inverso.
Pero no es tan práctico a menos que trabajes mucho con la notación polaca inversa.
Tenga en cuenta que
dc
es anteriorbc
ebc
históricamente se ha implementado como una envoltura,dc
perodc
POSIX no lo estandarizóDQdims '
calc
(requeridosudo apt-get install apcalc)
:Intérpretes de lenguaje de uso general:
La solución de manatwork
node
(modo interactivo:node
no se necesita la función de salida):Perl (modo interactivo:)
perl -de 1
:Python (modo interactivo:
python
no se necesita la función de salida):También admite números de precisión arbitrarios:
Si lo ha
clisp
instalado, también puede usar la notación polaca:Solución de Marco ,
lua
(modo interactivo:)lua
:PHP (modo interactivo:)
php -a
:Ruby (modo interactivo:
irb
no se necesita la función de salida):Guile (modo interactivo:)
guile
:S-Lang (modo interactivo:
slsh
no se necesita la función de salida, solo un;
terminador):Tcl (modo interactivo
tclsh
:; la función de salida no es necesaria, peroexpr
es):Conchas Javascript :
Varios SQL's:
SQLite (modo interactivo:)
sqlite3
:MySQL :
PostgreSQL :
_ ¡Las opciones en mysql y postgres detienen la imagen del 'arte ascii'!
Lenguajes especializados orientados a las matemáticas:
R en modo plano: permite generar 1000 números aleatorios normales y obtener la desviación estándar e imprimirla
R usando el script más pequeño : permite imprimir pi al cuadrado
PARI / GP , un extenso sistema de álgebra computacional para teoría de números, álgebra lineal y muchas otras cosas.
GNU Octave (un lenguaje interpretado de alto nivel, principalmente destinado a cálculos numéricos)
También es compatible con números complejos:
Julia , lenguaje e intérprete de alto rendimiento para informática científica y numérica.
Opción no interactiva:
fuente
whatis bc
->An arbitrary precision calculator language
¡Interesante! ¡Gracias!dc
, que es aún más divertido, ya que funciona mediante notación de pulido inverso.echo 20 5 + p | dc
Pero no es tan práctico a menos que trabajes mucho con la notación polaca inversa.## Command line calculator calc () { bc -l <<< "$@" }
math
construcción (o como se llame ahora) mientras hablamos. Siéntase libre de editar. No es mi respuesta y es el wiki de la comunidad.Hay muchas formas de calcular. Para expresiones simples puedes usarlo
bash
:o
expr
:Y para casos complejos hay una gran herramienta
bc
:Por cierto, bc puede calcular incluso expresiones muy complejas con raíces, logaritmos, cos, sin, etc.
fuente
expr
opción a la respuesta aceptada. Tuve que elegir uno para aceptar y centralizar.expr 20+5
. Necesita escribir espacios entre números y además para hacer que funcione:expr 20 + 5
. Eso es importante.Las soluciones mencionadas están bien para cálculos muy simples, pero muy propensos a errores. Ejemplos:
Un error de sintaxis como los últimos se nota fácilmente, pero las respuestas enteras con una parte flotante descartada pueden pasar desapercibidas y dar lugar a resultados incorrectos.
Es por eso que siempre uso un lenguaje de script como Lua para eso. Pero puede elegir cualquier lenguaje de script con el que esté familiarizado. Solo uso Lua como ejemplo. Las ventajas son
Ejemplos:
fuente
bc
El resultado no es entero, solo se redondea ascale
, cuyo valor predeterminado es 0. Entonces,bc <<< 'scale=4;9.0/2.0'
si desea la parte fraccionaria.scale
si lo usobc
en un par de semanas? Probablemente no. E incluso si hay una manera de cambiarlo permanentemente, te morderá si estás en un sistema con la configuración predeterminada.scale
desde que me conocíbc
hace años. Pero siempre olvidé si la función de salida enlua
esput
oputs
. ;)bc -l
lugar de simplebc
, luego nunca se preocupescale
.¿Nadie ha mencionado awk todavía?
Usando las funciones de shell POSIX y awk math power, simplemente defina esta función (una línea):
Luego solo ejecuta cosas como
calc 1+1
ocalc 5/2
Nota: Para que la función esté siempre disponible, agréguela a ~ / .bashrc (o al archivo de inicio de su shell correspondiente)
Por supuesto, un pequeño script llamado "calc" con los siguientes contenidos:
También podría funcionar.
fuente
a=0; b=0.0; if echo "$a" "$b" | awk '{ exit ($1 == $2) ? 0 : 1 }'; then echo 'equals'; else echo 'not equals'; fi
Podrías usar
bc
. P.ej,Alternativamente
bc <<< 25+5
también funcionará.O interactivamente, si desea hacer más que un simple cálculo simple:
La implementación de GNU
bc
imprime esa información de encabezado / copyright en el inicio cuando tanto su stdin como su stdout van a un terminal. Puede suprimirlo con la-q
opción (específica de GNU) . Para obtener más información, consulte la página de manual de bcfuente
ctrl-d
para salir?quit
c () { bc -l <<< "$@" }
definirá una funciónc
para un uso rápido y fácil. Por ejemplo,c 3/2
te dará1.50000000000000000000
. El enlace de arriba que describe cómo hacerlo está muerto.Puedes usar
calc
:Si solo ingresa
calc
sin otros argumentos, ingresa a un modo interactivo donde puede seguir haciendo matemáticas. Salga de esto escribiendo exit:O lo usa con la expresión como argumento y proporcionará la respuesta y luego saldrá
calc
es similar abc
, simplemente me gusta la forma en que se comporta mejor por defectofuente
calc -e '2+4; 3+5; 3.4+5; 2^4
imprime 4 líneas de salida, o simplementecalc -e 33+(3^3)
... +1 Me gusta la idea de usar algo llamado 'calc' para una calculadora :)-e
opción no es necesaria cuando solo hay una expresión ... ¡Me gusta iniciar Python y usarlo como una calculadora interactiva (pero, de nuevo, soy un programador de Python).
fuente
screen
solo ejecutar Python.Como nadie más lo ha mencionado, y aunque no es estrictamente una calculadora (pero tampoco lo son todos estos lenguajes de script de propósito general), me gustaría mencionar
units
:O, para obtener menos resultados para que pueda obtener solo el número que se usará
$()
para asignar a algo:E incluso hace conversiones de temperatura
Para obtener la conversión de temperatura en una expresión para un cálculo adicional, haga esto:
fuente
Además
ghci
, ese es el compilador Glasgow-Haskell en modo interactivo (ghc --interactive
en lugar de evaluar una expresión con-e
), hace una "calculadora" fascinante:fuente
ghc
el compilador de Glasgow Haskell?No puedo creer leer "el poder de JavaScript" (pero tuve que votar la respuesta para las otras partes, excepto Perl, por supuesto).
Prácticamente, para los casos simples donde la aritmética de enteros es suficiente, uso el buildin $ ((...)) y lo recomiendo. De lo contrario, en casi todos los casos se hace eco de "..." | BC es suficiente.
Para algunas operaciones aritméticas como estadísticas, operaciones matriciales y más
R
es la mejor herramienta:y para pequeños conjuntos de datos y resultados gráficos desechables,
oocalc
es una buena utilidad.fuente
Utilizo un pequeño script de Python que evaluará una expresión de Python e imprimirá el resultado, luego puedo ejecutar algo como
el guión es:
Desafortunadamente, no recuerdo de dónde tomé prestado la mayor parte del código, así que no puedo citarlo.
fuente
print(eval(' '.join(sys.argv[1:])))
haría lo mismo?Gnuplot
gnuplot: un programa de trazado interactivo
Siga el enlace anterior o escriba
gnuplot
el mensaje y luegohelp
dentro delintérprete de gnuplot .Gnuplot es un programa nacido para trazar datos, pero también se puede utilizar para el cálculo. Ofrece la ventaja de que puede definir funciones y / o utilizar las integradas.
Root (o algún otro intérprete de C )
Se puede utilizar como C intérprete , CINT , o puede utilizar uno de los muchos muchos otros intérpretes C . En mi humilde opinión, es enorme, complejo, poderoso y no siempre amigable, pero también puede dar una gran satisfacción.
Si realmente no desea escuchar la pequeña voz dentro de usted que cita a Confucio y está listo para romper una mosca (mantequilla) en la rueda , puede usar la raíz . En este caso
-l
es obligatorio evitar mostrar la pantalla de bienvenida ...fuente
Para aritmética de enteros (donde 3/2 = 1)
bash
echo $(( 1+1 ))
fish
math 1+1
zsh*
echo $((1+1))
*: y ksh93, yash
Para aritmética de coma flotante (donde 3/2 = 1.5)
bash
awk "BEGIN {print 10/3}"
(baja precisión)bash
echo "10/3"|bc -l
(alta precisión)fish
math -s4 10/3
zsh*
echo $((10./3))
*: y ksh93, yash
Por supuesto, puede configurar su shell para usar awk con un mínimo de mecanografía
calc 10/3
(ver notas sobre cómo hacerlo para bash 1 y fish 2 ).La razón principal para sugerir awk para bash es que está preinstalado en casi todos los sistemas operativos tipo Unix y es razonablemente ligero (por supuesto, existe el costo de iniciar un proceso) con una salida menos precisa pero más amigable para los humanos
bc -l
que imprime 20 decimales dígitos (aunque ciertamente puede ajustar awk para obtener más dígitos decimales ).Notas
(1) Cómo usar la sintaxis simplificada en bash
Agregue esta función bash a su
~/.bashrc
:(2) Cómo usar la sintaxis simplificada en peces
Cree una
calc
función de pez (es decir, un archivo de texto llamado/home/ndemou/.config/fish/functions/calc.fish
):fuente
awk
usará eldouble
tipo de punto flotante de su sistema , por lo que será tan preciso como la mayoría de las otras herramientas que no hacen precisión arbitraria (tenga en cuenta que gawk puede hacer precisión arbitraria).awk
usa laOFMT
variable para convertir el número a su representación de cadena para la salida (%.6g
de manera predeterminada, es posible que desee cambiar eso%.17g
si desea una mayor precisión ).fish
'smath
es sólo una función que llamabc
(aunque eso es cambiar )bc
. Ya no está en las versiones más nuevas donde las cosas comomath "scale=4; 10/3"
ya no funcionan (enmath -s4 10/3
cambio ahora)math -s4
parece que también es compatible con versiones anteriores)Para los cálculos de la consola, yo uso
concalc
. (sudo aptitude install concalc
)Después de eso, simplemente escriba
concalc
y presione enter. No proporcionará un mensaje, pero solo ingrese su cálculo (sin espacios) y presione enter, y en la siguiente línea, le dará el valor numérico.fuente
SQLite :
MySQL :
PostgreSQL :
fuente
from dual
es necesario para Oracle, MySQL puede hacerloselect
sinfrom
cláusula. 2) PostgreSQL no requiere el alias. 3) El;
solo es requerido por SQLite. 4) MySQL y PostgreSQL funcionarán solo si pueden conectarse a un servidor de base de datos. 5) MySQL y PostgreSQL dibujarán una tabla de arte ASCII alrededor de los resultados. Para obtener solo el valor:mysql -BNe 'select 1+1'
ypsql -tAc 'select 1+1
.Utilice la Biblioteca aritmética de precisión múltiple GNU a través del
run-expr
programa suministrado :tar -xvf gmp-5.1.3.tar.lz
./configure
ymake
(no es necesario instalar)make run-expr
~/bin
directorio:ln -s /path/to/gmp/demos/expr/run-expr ~/bin/run-expr
alias calcf='run-expr -f'
para evaluación de coma flotanteSalida:
Del
run-expr.c
archivo:Consulte el manual para conocer las diferencias y detalles de las clases de funciones.
fuente