Die echo "20+5"
wörtliche Verwendung erzeugt den Text " 20+5
".
Welchen Befehl kann ich 25
in diesem Fall verwenden, um die numerische Summe abzurufen?
Und was ist der einfachste Weg, dies mit bash als Gleitkommazahl zu tun? Zum Beispiel echo $((3224/3807.0))
druckt 0
:(.
Ich suche nach Antworten, indem ich entweder die Basisbefehlsshell ('Befehlszeile') selbst verwende oder indem ich Sprachen verwende, die über die Befehlszeile verfügbar sind.
shell
command-line
arithmetic
floating-point
calculator
Michael Durrant
quelle
quelle
bc
, kann es sich lohnen, über die-l
Option in der Manpage nachzulesen .Antworten:
Es gibt viele Möglichkeiten !!!
Zusammenfassung
Einzelheiten
Muscheln
Sie können POSIX arithmetische Erweiterung für verwenden Integer - Arithmetik
echo "$((...))"
:Ziemlich portabel (
ash dash yash bash ksh93 lksh zsh
):Mit der printf-Funktion zum Drucken von Floats können wir die meisten Shells erweitern, um Gleitkomma-Berechnungen durchzuführen, wenn auch mit einem begrenzten Bereich (nicht mehr als 10 Stellen):
ksh93
,yash
undzsh
unterstütze Floats hier:nur
ksh93
(direkt) undzsh
Laden der Bibliothek mathfunc hier:(
zsh
müssen geladen werdenzmodload zsh/mathfunc
, um Funktionen wie zu erhaltenatan
).Interaktiv mit zsh:
Mit (t) csh (nur Ganzzahl):
In der
rc
Shell-Familieakanga
ist die mit arithmetischer Erweiterung:POSIX-Werkzeugkasten
bc
(siehe unten für den interaktiven Modus), Handbuch hierMnemonic: best calculator (obwohl das
b
eigentlich für basic ist ).(unterstützt beliebige Präzisionszahlen)
bc interaktiver Modus:
Rushs Lösung
expr
(kein interaktiver Modus):Joshuas Lösung :
awk
(kein interaktiver Modus):Andere mehr oder weniger tragbare Werkzeuge
Die Lösung von Arcege
dc
(interaktiver Modus :)dc
:Was noch mehr Spaß macht, da es in umgekehrter polnischer Notation funktioniert.
Aber nicht so praktisch, es sei denn, Sie arbeiten viel mit umgekehrter polnischer Notation.
Beachten Sie, dass es
dc
älter istbc
und inbc
der Vergangenheit als Wrapper implementiert wurdedc
,dc
jedoch nicht von POSIX standardisiert wurdeDQdims 's
calc
(erforderlichsudo apt-get install apcalc)
:Allzwecksprachdolmetscher:
manatworks lösung,
node
(interaktiver modus :; ausgabefunktionnode
nicht erforderlich):Perl (interaktiver Modus:)
perl -de 1
:Python (interaktiver Modus
python
:; Ausgabefunktion nicht erforderlich):Unterstützt auch beliebige Präzisionszahlen:
Wenn Sie
clisp
installiert haben, können Sie auch die polnische Notation verwenden:Marcos Lösung
lua
(interaktiver Modus:)lua
:PHP (interaktiver Modus:)
php -a
:Ruby (interaktiver Modus
irb
:; Ausgabefunktion nicht erforderlich):Guile (interaktiver Modus :)
guile
:S-Lang (interaktiver Modus
slsh
:; Ausgabefunktion nicht erforderlich, nur ein;
Abschlusszeichen):Tcl (interaktiver Modus
tclsh
:; Ausgabefunktion wird nicht benötigt, ist aberexpr
):Javascript- Shells:
Verschiedene SQL's:
SQLite (interaktiver Modus :)
sqlite3
:MySQL :
PostgreSQL :
_Die Optionen für mysql und postgres stoppen das 'ASCII Art'-Image!
Spezialisierte mathematisch orientierte Sprachen:
R im normalen Modus - Lässt 1000 normale Zufallszahlen generieren und die Standardabweichung abrufen und ausdrucken
R mit dem kleinen Skript - Lässt pi im Quadrat drucken
PARI / GP , ein umfangreiches Computeralgebrasystem für Zahlentheorie, lineare Algebra und viele andere Dinge
GNU Octave (eine hochinterpretierte Sprache, die hauptsächlich für numerische Berechnungen gedacht ist)
Unterstützt auch komplexe Zahlen:
Julia , Hochleistungssprache und Dolmetscherin für wissenschaftliches und numerisches Rechnen.
Nicht interaktive Option:
quelle
whatis bc
->An arbitrary precision calculator language
interessant! Vielen Dank!dc
, was noch mehr Spaß macht, da es durch umgekehrte polnische Notation funktioniert.echo 20 5 + p | dc
Aber nicht so praktisch, es sei denn, Sie arbeiten viel mit umgekehrter polnischer Notation.## Command line calculator calc () { bc -l <<< "$@" }
math
Version (oder wie sie jetzt heißt), während wir sprechen. Fühlen Sie sich frei zu bearbeiten. Es ist nicht meine Antwort und es ist Community-Wiki.Es gibt viele Möglichkeiten zu berechnen. Für einfache Ausdrücke können Sie sich
bash
selbst verwenden:oder
expr
:Und für komplexe Fälle gibt es ein großartiges Werkzeug
bc
:Übrigens kann bc auch sehr komplexe Ausdrücke mit Wurzeln, Logarithmen, cos, sin usw. berechnen.
quelle
expr
Option zur akzeptierten Antwort hinzugefügt . Musste eine auswählen, um zu akzeptieren und zu zentralisieren.expr 20+5
. Sie müssen Räume zwischen Zahlen und zzgl geben , damit es funktioniert:expr 20 + 5
. Das ist wichtig.Die genannten Lösungen eignen sich für sehr einfache Berechnungen, sind aber sehr fehleranfällig. Beispiele:
Ein Syntaxfehler wie der letzte wird leicht bemerkt, aber ganzzahlige Antworten mit einem verworfenen Float-Teil können leicht unbemerkt bleiben und zu falschen Ergebnissen führen.
Deshalb benutze ich immer eine Skriptsprache wie Lua. Sie können jedoch jede Ihnen vertraute Skriptsprache auswählen. Ich benutze nur Lua als Beispiel. Die Vorteile sind
Beispiele:
quelle
bc
Das Ergebnis ist keine ganze Zahl, sondern nur eine gerundete Zahl.scale
Der Standardwert ist 0.bc <<< 'scale=4;9.0/2.0'
Wenn Sie also den Bruchteil wollen, geben Sie den Wert ein .scale
wenn ich esbc
in ein paar Wochen verwende? Wahrscheinlich nicht. Und selbst wenn es eine Möglichkeit gibt, es dauerhaft zu ändern, wird es Sie beißen, wenn Sie sich auf einem System mit den Standardeinstellungen befinden.scale
da ich trafbc
vor ersten Jahren. Ich habe aber immer vergessen, ob die Ausgabe in Funktionlua
istput
oder nichtputs
. ;)bc -l
und nicht einfachbc
, und sorgen Sie sich dann niescale
.Hat noch niemand awk erwähnt?
Definieren Sie mit POSIX-Shell-Funktionen und awk math power einfach diese (einzeilige) Funktion:
Dann führen Sie einfach Dinge wie
calc 1+1
oder auscalc 5/2
Hinweis: Damit die Funktion immer verfügbar ist, fügen Sie sie zu ~ / .bashrc (oder der Startdatei Ihrer entsprechenden Shell) hinzu.
Natürlich ein kleines Skript namens "calc" mit folgendem Inhalt:
könnte auch funktionieren.
quelle
a=0; b=0.0; if echo "$a" "$b" | awk '{ exit ($1 == $2) ? 0 : 1 }'; then echo 'equals'; else echo 'not equals'; fi
Du könntest es gebrauchen
bc
. Z.B,Alternativ
bc <<< 25+5
klappt das auch.Oder interaktiv, wenn Sie mehr als nur eine einfache Berechnung durchführen möchten:
Die GNU-Implementierung von gibt
bc
diese Header- / Copyright-Informationen beim Start aus, wenn sowohl stdin als auch stdout an ein Terminal gesendet werden. Sie können es mit der (GNU-spezifischen)-q
Option unterdrücken . Weitere Informationen finden Sie auf der bc-Manpagequelle
ctrl-d
aussteigen?quit
c () { bc -l <<< "$@" }
Definiert eine Funktionc
für die schnelle und einfache Verwendung. zBc 3/2
wird dir geben1.50000000000000000000
. Der Link oben, der beschreibt, wie man das macht, ist tot.Sie können verwenden
calc
:Wenn Sie nur
calc
ohne weitere Argumente eingeben, wird ein interaktiver Modus aufgerufen, in dem Sie einfach weiter rechnen können. Sie beenden dies, indem Sie exit eingeben:Oder Sie verwenden es mit dem Ausdruck als Argument und es liefert die Antwort und beendet dann
calc
ist ähnlich wiebc
, ich mag nur die Art und Weise, wie es sich als Standard besser verhältquelle
calc -e '2+4; 3+5; 3.4+5; 2^4
druckt 4 Ausgangsleitungen, oder einfach nurcalc -e 33+(3^3)
.. +1 Ich mag die Idee von für einen Rechner etwas namens ‚calc‘ mit :)-e
Option nicht benötigt wird, wenn es nur einen Ausdruck gibt ... ordentlich!Ich starte gerne Python und verwende es als interaktiven Taschenrechner (aber ich bin auch ein Python-Programmierer).
quelle
screen
nur Python ausgeführt.Da es von niemand anderem erwähnt wurde und es sich nicht ausschließlich um einen Taschenrechner handelt (es handelt sich jedoch auch nicht um all diese Allzweck-Skriptsprachen), möchte ich Folgendes erwähnen
units
:Oder für weniger Ausgabe, damit Sie nur die Nummer erhalten
$()
, mit der Sie etwas zuweisen können:Und es werden sogar Temperaturumrechnungen durchgeführt
Gehen Sie folgendermaßen vor, um die Temperaturkonvertierung in einem Ausdruck für die weitere Berechnung abzurufen:
quelle
Auch
ghci
, das ist der Glasgow-Haskell Compiler im interaktiven Modus (ghc --interactive
im Gegensatz zu ihm einen Ausdruck mit Auswertung-e
), sorgt für einen faszinierenden „Taschenrechner“:quelle
ghc
Glasgow Haskell Compiler?Ich kann nicht glauben, "die Macht von JavaScript" zu lesen (aber ich musste die Antwort für die anderen Teile positiv bewerten, außer natürlich für Perl.
In der Praxis verwende ich für die einfachen Fälle, in denen Integer-Arithmetik ausreicht, das buildin $ ((...)) und empfehle es. Andernfalls wird in fast allen Fällen das Echo "..." | bc ist ausreichend.
Für einige arithmetische Operationen wie Statistiken, Matrixoperationen und mehr
R
ist das bessere Werkzeug:und für kleine Datensätze und grafische Ergebnisse wegwerfen,
oocalc
ist ein schönes Dienstprogramm.quelle
Ich benutze ein kleines Python-Skript, das einen Python-Ausdruck auswertet und das Ergebnis ausgibt, dann kann ich so etwas wie ausführen
Das Drehbuch lautet:
Leider kann ich mich nicht erinnern, woher ich den größten Teil des Codes ausgeliehen habe, daher kann ich ihn nicht zitieren.
quelle
print(eval(' '.join(sys.argv[1:])))
das gleiche tun?Gnuplot
gnuplot - ein interaktives Plotprogramm
Folgen Sie dem obigen Link oder geben Sie
gnuplot
die Eingabeaufforderunghelp
im gnuplot- Interpreter ein.Gnuplot ist ein Programm zum Zeichnen von Daten, kann aber auch zur Berechnung verwendet werden. Es bietet den Vorteil, dass Sie Funktionen definieren und / oder die eingebauten verwenden können.
Root (oder ein anderer C-Interpreter )
Sie können es als C-Interpreter , CINT oder als einen der vielen anderen C-Interpreter verwenden . IMHO, es ist riesig, komplex, mächtig und nicht immer freundlich, kann aber auch große Befriedigung geben.
Wenn du die kleine Stimme in dir, die Confucio zitiert, wirklich nicht hören willst und bereit bist , eine (Butter-) Fliege auf dem Rad zu zerbrechen, kannst du root verwenden . In diesem Fall
-l
ist zwingend zu vermeiden, Splash-Screen zu zeigen ...quelle
Für ganzzahlige Arithmetik (wobei 3/2 = 1)
bash
echo $(( 1+1 ))
fish
math 1+1
zsh*
echo $((1+1))
*: und ksh93, yash
Für Gleitkomma-Arithmetik (wobei 3/2 = 1,5)
bash
awk "BEGIN {print 10/3}"
(geringe Präzision)bash
echo "10/3"|bc -l
(hohe Präzision)fish
math -s4 10/3
zsh*
echo $((10./3))
*: und ksh93, yash
Sie können Ihre Shell natürlich so konfigurieren, dass awk mit minimaler Eingabe wie folgt verwendet wird
calc 10/3
(siehe Hinweise zur Vorgehensweise für Bash 1 und Fish 2 ).Der Hauptgrund für die Empfehlung von awk für bash ist, dass es auf fast allen Unix-ähnlichen Betriebssystemen vorinstalliert ist und einigermaßen leicht ist (natürlich sind die Kosten für das Starten eines Prozesses hoch) mit einer weniger präzisen, aber benutzerfreundlicheren Ausgabe als
bc -l
der Ausgabe von 20 Dezimalstellen Stellen (obwohl Sie sicherlich awk zwicken können, um mehr Dezimalstellen zu erhalten ).Anmerkungen
(1) Verwendung der vereinfachten Syntax in Bash
Fügen Sie diese Bash-Funktion hinzu zu
~/.bashrc
:(2) Verwendung der vereinfachten Syntax in Fischen
Erstellen Sie eine
calc
Fischfunktion (dh eine Textdatei mit dem Namen/home/ndemou/.config/fish/functions/calc.fish
):quelle
awk
verwendet dendouble
Gleitkommatyp Ihres Systems und ist daher genauso präzise wie die meisten anderen Werkzeuge, die keine willkürliche Genauigkeit haben (beachten Sie, dass Gawk eine willkürliche Genauigkeit haben kann).awk
die verwendetOFMT
variable Anzahl ihrer String - Darstellung für die Ausgabe zu konvertieren (%.6g
standardmäßig ist , sollten Sie das ändern , um%.17g
die Sie höher wollen Präzision ).fish
‚smath
nur eine Funktion, die Anrufebc
(wenn auch das ist zu ändern )bc
. Es ist nicht mehr länger in neueren Versionen, in denen Dinge wiemath "scale=4; 10/3"
nicht mehr funktionieren (math -s4 10/3
stattdessen jetzt)math -s4
scheint auch in älteren Versionen unterstützt zu werden)Für Konsolenberechnungen verwende ich
concalc
. (sudo aptitude install concalc
)Geben Sie danach einfach ein
concalc
und drücken Sie die Eingabetaste. Es wird keine Eingabeaufforderung angezeigt, aber geben Sie einfach Ihre Berechnung ein (keine Leerzeichen) und drücken Sie die Eingabetaste. In der nächsten Zeile wird der numerische Wert angezeigt.quelle
SQLite :
MySQL :
PostgreSQL :
quelle
from dual
Wird von Oracle benötigt, kann MySQLselect
ohnefrom
Klausel. 2) PostgreSQL benötigt keinen Alias. 3) Das;
wird nur von SQLite benötigt. 4) MySQL und PostgreSQL funktionieren nur, wenn sie eine Verbindung zu einem Datenbankserver herstellen können. 5) MySQL und PostgreSQL zeichnen eine ASCII-Art-Tabelle um die Ergebnisse. Um nur den Wert zu erhalten:mysql -BNe 'select 1+1'
undpsql -tAc 'select 1+1
.Verwenden Sie die GNU Multiple Precision Arithmetic Library über das mitgelieferte
run-expr
Programm:tar -xvf gmp-5.1.3.tar.lz
./configure
undmake
(keine Installation erforderlich)make run-expr
~/bin
Verzeichnis:ln -s /path/to/gmp/demos/expr/run-expr ~/bin/run-expr
alias calcf='run-expr -f'
zur Gleitkomma-AuswertungAusgabe:
Aus der
run-expr.c
Akte:Im Handbuch finden Sie Unterschiede und Einzelheiten zu Funktionsklassen.
quelle