Utiliser echo "20+5"
littéralement le texte " 20+5
".
Quelle commande puis-je utiliser pour obtenir la somme numérique, 25
dans ce cas?
Aussi, quel est le moyen le plus simple de le faire en utilisant simplement bash pour virgule flottante? Par exemple, echo $((3224/3807.0))
empreintes 0
:(.
Je cherche des réponses à l'aide du shell de commande de base ("ligne de commande") ou des langues disponibles à partir de la ligne de commande.
shell
command-line
arithmetic
floating-point
calculator
Michael Durrant
la source
la source
bc
, cela vaut peut-être la peine de vous renseigner sur l'-l
option dans la page de manuel.Réponses:
Il y a beaucoup d'options !!!
Sommaire
Détails
Coquilles
Vous pouvez utiliser le développement arithmétique POSIX pour l' arithmétique entière
echo "$((...))"
:Tout à fait portable (
ash dash yash bash ksh93 lksh zsh
):En utilisant la capacité printf à imprimer des flottants, nous pouvons étendre la plupart des shells pour effectuer des calculs en virgule flottante, avec une plage limitée (10 chiffres au maximum):
ksh93
,yash
etzsh
supporte les flotteurs ici:seulement
ksh93
(directement) etzsh
chargement de la bibliothèque mathfunc ici:(
zsh
besoin de chargerzmodload zsh/mathfunc
pour obtenir des fonctions commeatan
).Interactivement avec zsh:
Avec (t) csh (entier uniquement):
Dans la
rc
famille shell,akanga
est celui avec expansion arithmétique:Boîte à outils POSIX
bc
(voir ci-dessous pour le mode interactif), manuel iciMnémonique: best ccalculateur (bien que le
b
soit en fait pour base ).(supporte des nombres de précision arbitraires)
mode interactif bc:
La solution de Rush ,
expr
(pas de mode interactif):La solution de Joshua :
awk
(pas de mode interactif):Autres outils plus ou moins portables
La solution Arcege ,
dc
(mode interactif :)dc
:Ce qui est encore plus amusant car cela fonctionne par la notation polonaise inversée.
Mais pas aussi pratique à moins de travailler beaucoup avec la notation polonaise inversée.
Notez que cette version
dc
est antérieure àbc
etbc
historiquement implémentée comme encapsuleurdc
maisdc
n’a pas été normalisée par POSIX.DQdims 's
calc
(requissudo apt-get install apcalc)
:Interprètes de langue à usage général:
solution de manatwork ,
node
(mode interactif :;node
fonction de sortie non nécessaire):Perl (mode interactif:)
perl -de 1
:Python (mode interactif
python
:; fonction de sortie non nécessaire):Prend également en charge les nombres de précision arbitraires:
Si vous avez
clisp
installé, vous pouvez également utiliser la notation polonaise:La solution de Marco ,
lua
(mode interactif:)lua
:PHP (mode interactif:)
php -a
:Ruby (mode interactif
irb
:; fonction de sortie non nécessaire):Guile (mode interactif:)
guile
:S-Lang (mode interactif
slsh
:; fonction de sortie non nécessaire, juste un;
terminateur):Tcl (mode interactif
tclsh
:; fonction de sortie non nécessaire, maisexpr
est):Javascript shell:
Divers SQL:
SQLite (mode interactif:)
sqlite3
:MySQL :
PostgreSQL :
_Les options sur mysql et postgres arrêtent l'image 'art ascii'!
Langages spécialisés en mathématiques:
R en mode brut - permet de générer 1 000 nombres aléatoires normaux, d'obtenir l'écart type et de l'imprimer
R utilisant le script littler - permet d’imprimer pi au carré
PARI / GP , un système de calcul étendu pour la théorie des nombres, l'algèbre linéaire et bien d'autres choses
GNU Octave (langage interprété de haut niveau, principalement destiné aux calculs numériques)
Prend également en charge les nombres complexes:
Julia , langage performant et interprète pour l'informatique scientifique et numérique.
Option non interactive:
la source
whatis bc
->An arbitrary precision calculator language
Intéressant! Merci!dc
, ce qui est encore plus amusant car cela fonctionne par la notation polonaise inversée.echo 20 5 + p | dc
Mais pas aussi pratique à moins de travailler beaucoup avec la notation polonaise inversée.## Command line calculator calc () { bc -l <<< "$@" }
math
structure (ou ce que l'on appelle maintenant) en ce moment même. N'hésitez pas à éditer. Ce n'est pas ma réponse et c'est un wiki de communauté.Il y a plusieurs façons de calculer. Pour les expressions simples, vous pouvez utiliser
bash
lui-même:ou
expr
:Et pour les cas complexes, il existe un excellent outil
bc
:Btw, bc peut calculer même une expression très complexe avec des racines, des logarithmes, cos, sin, etc.
la source
expr
option à la réponse acceptée. J'ai dû en choisir un pour l'accepter et le centraliser.expr 20+5
. Vous devez saisir les espaces entre les nombres et plus pour le faire fonctionner:expr 20 + 5
. C'est important.Les solutions mentionnées conviennent pour des calculs très simples, mais très sujettes aux erreurs. Exemples:
Vous remarquerez facilement une erreur de syntaxe comme les dernières, mais les réponses entières avec une partie flottante ignorée peuvent facilement passer inaperçues et conduire à des résultats erronés.
C'est pourquoi j'utilise toujours un langage de script comme Lua pour cela. Mais vous pouvez choisir n’importe quel langage de script avec lequel vous êtes familier. Je viens d'utiliser Lua comme exemple. Les avantages sont
Exemples:
la source
bc
Le résultat de n'est pas entier, mais arrondi àscale
la valeur par défaut qui est 0. Donc,bc <<< 'scale=4;9.0/2.0'
si vous voulez la partie décimale.scale
si je l'utilisebc
dans quelques semaines? Probablement pas. Et même s'il existe un moyen de le changer de façon permanente, il vous mordra si vous êtes sur un système avec les paramètres par défaut.scale
depuis mabc
première rencontre il y a des années. Mais j'ai toujours oublié si la fonction de sortielua
estput
ouputs
. ;)bc -l
plutôt que simplebc
, alors ne vous inquiétez passcale
.Personne n'a encore mentionné awk?
En utilisant les fonctions du shell POSIX et la puissance mathématique awk, définissez simplement cette fonction (une ligne):
Ensuite, exécutez des choses comme
calc 1+1
oucalc 5/2
Remarque: pour que la fonction soit toujours disponible, ajoutez-la à ~ / .bashrc (ou au fichier de démarrage de votre shell correspondant).
Bien sûr, un petit script nommé "calc" avec le contenu suivant:
pourrait aussi travailler.
la source
a=0; b=0.0; if echo "$a" "$b" | awk '{ exit ($1 == $2) ? 0 : 1 }'; then echo 'equals'; else echo 'not equals'; fi
Vous pourriez utiliser
bc
. Par exemple,Alternativement
bc <<< 25+5
va aussi travailler.Ou interactivement, si vous voulez faire plus qu'un simple calcul:
L’implémentation GNU de l’
bc
impression de cet en-tête / des informations de copyright au démarrage lorsque stdin et stdout sont envoyés à un terminal. Vous pouvez le supprimer avec l'-q
option (spécifique à GNU) . Pour plus d'informations, voir la page de manuel de bcla source
ctrl-d
sort?quit
c () { bc -l <<< "$@" }
définira une fonctionc
pour une utilisation rapide et facile. par exemplec 3/2
va vous donner1.50000000000000000000
. Le lien ci-dessus décrivant la marche à suivre est mort.Vous pouvez utiliser
calc
:Si vous entrez simplement
calc
sans autres arguments, vous entrez dans un mode interactif où vous pouvez continuer à faire des calculs. Vous quittez ceci en tapant exit:Ou vous l’utilisez avec l’expression en tant qu’argument et vous obtiendrez la réponse, puis vous quitterez.
calc
est similaire àbc
, j'aime juste la façon dont il se comporte mieux par défautla source
calc -e '2+4; 3+5; 3.4+5; 2^4
imprime 4 lignes de sortie, ou tout simplementcalc -e 33+(3^3)
.. +1 J'aime l'idée d'utiliser quelque chose appelé 'calc' pour une calculatrice :)-e
option n'est pas nécessaire lorsqu'il n'y a qu'une seule expression ... soignée! ..J'aime lancer Python et l'utiliser comme calculatrice interactive (mais encore une fois, je suis un programmeur Python).
la source
screen
cours d'exécution uniquement en Python.Puisque personne n’en a parlé, et bien que ce ne soit pas strictement une calculatrice (mais tous ces langages de script à usage général ne le sont pas non plus), je voudrais mentionner
units
:Ou, pour moins de sortie afin que vous puissiez obtenir juste le nombre à utiliser
$()
pour assigner à quelque chose:Et il fait même des conversions de température
Pour obtenir la conversion de température dans une expression pour un calcul ultérieur, procédez comme suit:
la source
De plus
ghci
, le compilateur Glasgow-Haskell en mode interactif (ghc --interactive
contrairement à l'évaluation d'une expression avec-e
), constitue un "calculateur" fascinant:la source
ghc
ce que cela signifie Glasgow Haskell Compiler?Je n'arrive pas à croire de lire "le pouvoir de JavaScript" (mais je devais relire la réponse pour les autres parties, sauf en perl bien sûr.
Pratiquement, pour les cas simples où l'arithmétique entière est suffisante, j'utilise le buildin $ ((...)) et le recommande. Sinon, dans presque tous les cas, l'écho "..." | bc est suffisant.
Pour certaines opérations arithmétiques telles que les statistiques, les opérations matricielles et autres,
R
le meilleur outil est le suivant:et pour les petits ensembles de données et les résultats graphiques à jeter,
oocalc
est un bon utilitaire.la source
J'utilise un petit script python qui évalue une expression python et affiche le résultat, puis je peux exécuter quelque chose comme:
le script est:
Malheureusement, je ne me souviens pas d'où j'ai emprunté la majeure partie du code, je ne peux donc pas le citer.
la source
print(eval(' '.join(sys.argv[1:])))
la même chose?Gnuplot
gnuplot - un programme de traçage interactif
Suivez le lien ci-dessus ou tapez
gnuplot
l'invite puishelp
à l'intérieur de l'interpréteur gnuplot .Gnuplot est un programme conçu pour tracer des données, mais peut également être utilisé pour le calcul. Il offre l’avantage que vous pouvez définir des fonctions et / ou utiliser les fonctions intégrées.
Racine (ou un autre interprète en C )
Vous pouvez l' utiliser comme interprète C , CINT , ou vous pouvez utiliser l' un des nombreux autres interprètes beaucoup C . IMHO, c'est énorme, complexe, puissant et pas toujours amical mais peut donner une grande satisfaction aussi.
Si vous ne voulez vraiment pas écouter la petite voix en vous qui cite Confucio et que vous êtes prêt à casser une mouche au beurre, vous pouvez utiliser root . Dans ce cas, il
-l
est obligatoire d'éviter d'afficher l'écran de démarrage ...la source
Pour l'arithmétique de nombre entier (où 3/2 = 1)
bash
echo $(( 1+1 ))
fish
math 1+1
zsh*
echo $((1+1))
*: et ksh93, yash
Pour l'arithmétique en virgule flottante (où 3/2 = 1,5)
bash
awk "BEGIN {print 10/3}"
(faible précision)bash
echo "10/3"|bc -l
(haute précision)fish
math -s4 10/3
zsh*
echo $((10./3))
*: et ksh93, yash
Vous pouvez bien sûr configurer votre shell pour utiliser awk avec un minimum de frappe comme
calc 10/3
(voir les notes sur la façon de le faire pour bash 1 et fish 2 ).La raison principale de suggérer awk pour bash est qu'il est préinstallé sur presque tous les systèmes d'exploitation de type Unix et qu'il est relativement léger (il y a bien sûr le coût de démarrage d'un processus) avec une sortie moins précise mais plus conviviale que celle
bc -l
qui imprime 20 décimales. chiffres (bien que vous puissiez certainement modifier awk pour obtenir plus de chiffres décimaux ).Remarques
(1) Comment utiliser la syntaxe simplifiée dans bash
Ajoutez cette fonction bash à votre
~/.bashrc
:(2) Comment utiliser la syntaxe simplifiée chez les poissons
Créez une
calc
fonction poisson (c'est-à-dire un fichier texte nommé/home/ndemou/.config/fish/functions/calc.fish
):la source
awk
utilisera le type dedouble
virgule flottante de votre système , donc sera aussi précis que la plupart des autres outils qui ne font pas de précision arbitraire (notez que gawk peut faire une précision arbitraire).awk
utilise laOFMT
variable pour convertir nombre en représentation sous forme de chaîne pour la sortie (%.6g
par défaut, vous souhaiterez peut-être modifier cette valeur si%.17g
vous souhaitez une précision supérieure ).fish
l »math
est juste une fonction qui appellebc
(si c'est à changer )bc
. Ce n'est plus dans les nouvelles versions où des choses commemath "scale=4; 10/3"
ne fonctionneront plus (à lamath -s4 10/3
place maintenant)math -s4
semble également être supporté par les anciennes versions)Pour les calculs sur console, j'utilise
concalc
. (sudo aptitude install concalc
)Après cela, tapez
concalc
et appuyez sur Entrée. Il ne fournira pas d'invite, mais il vous suffira de taper votre calcul (sans espace) et d'appuyer sur Entrée. La ligne suivante vous donnera la valeur numérique.la source
SQLite :
MySQL :
PostgreSQL :
la source
from dual
est nécessaire pour Oracle, MySQL peut le faireselect
sansfrom
clause. 2) PostgreSQL ne nécessite pas l’alias. 3) Le;
n'est requis que par SQLite. 4) MySQL et PostgreSQL ne fonctionneront que s’ils peuvent se connecter à un serveur de base de données. 5) MySQL et PostgreSQL vont dessiner un tableau d’art ASCII autour des résultats. Pour obtenir uniquement la valeur:mysql -BNe 'select 1+1'
etpsql -tAc 'select 1+1
.Utilisez la bibliothèque arithmétique à précision multiple GNU via le
run-expr
programme fourni :tar -xvf gmp-5.1.3.tar.lz
./configure
etmake
(pas besoin d'installer)make run-expr
~/bin
répertoire:ln -s /path/to/gmp/demos/expr/run-expr ~/bin/run-expr
alias calcf='run-expr -f'
pour l'évaluation en virgule flottanteSortie:
Du
run-expr.c
dossier:Voir le manuel pour les différences et les détails des classes de fonctions.
la source