Menggunakan echo "20+5"
harfiah menghasilkan teks " 20+5
".
Perintah apa yang dapat saya gunakan untuk mendapatkan jumlah numerik, 25
dalam hal ini?
Juga, apa cara termudah untuk melakukannya hanya menggunakan bash untuk floating point? Misalnya, echo $((3224/3807.0))
mencetak 0
:(.
Saya mencari jawaban baik menggunakan shell perintah dasar ('command line') itu sendiri atau melalui menggunakan bahasa yang tersedia dari baris perintah.
shell
command-line
arithmetic
floating-point
calculator
Michael Durrant
sumber
sumber
bc
, mungkin ada baiknya Anda membaca tentang-l
opsi di halaman manual.Jawaban:
Ada banyak pilihan!!!
Ringkasan
Detail
Kerang
Anda dapat menggunakan ekspansi aritmatika POSIX untuk aritmatika integer
echo "$((...))"
:Quite portable (
ash dash yash bash ksh93 lksh zsh
):Menggunakan kemampuan printf untuk mencetak floats, kami dapat memperluas sebagian besar shell untuk melakukan matematika floating point meskipun dengan rentang terbatas (tidak lebih dari 10 digit):
ksh93
,yash
danzsh
lakukan dukungan mengapung di sini:hanya
ksh93
(langsung) danzsh
memuat fungsi perpustakaan perpustakaan di sini:(
zsh
perlu memuatzmodload zsh/mathfunc
untuk mendapatkan fungsi sepertiatan
).Secara interaktif dengan zsh:
Dengan (t) csh (hanya bilangan bulat):
Dalam
rc
keluarga shell,akanga
adalah satu dengan ekspansi aritmatika:Toolest POSIX
bc
(lihat di bawah untuk mode interaktif), manual di siniMnemonic: best calculator (meskipun
b
sebenarnya untuk dasar ).(mendukung angka presisi acak)
mode interaktif bc:
Solusi Rush ,
expr
(tanpa mode interaktif):Solusi Joshua :
awk
(tidak ada mode interaktif):Alat portabel lainnya kurang lebih
Solusi Arcege ,
dc
(mode interaktif :)dc
:Yang bahkan lebih menyenangkan karena ia bekerja dengan notasi polish terbalik.
Tetapi tidak praktis jika Anda tidak banyak bekerja dengan notasi polish terbalik.
Perhatikan bahwa ada
dc
sebelumbc
danbc
telah secara historis diterapkan sebagai pembungkusdc
tetapidc
tidak dibakukan oleh POSIXDQdims 's
calc
(diperlukansudo apt-get install apcalc)
:Penerjemah bahasa tujuan umum:
solusi manatwork ,
node
(mode interaktif :;node
fungsi output tidak diperlukan):Perl (mode interaktif:)
perl -de 1
:Python (mode interaktif
python
:; fungsi output tidak diperlukan):Juga mendukung angka presisi acak:
Jika sudah
clisp
menginstal, Anda juga dapat menggunakan notasi semir:Solusi Marco ,
lua
(mode interaktif:)lua
:PHP (mode interaktif:)
php -a
:Ruby (mode interaktif
irb
:; fungsi output tidak diperlukan):Tipu muslihat (mode interaktif :)
guile
:S-Lang (mode interaktif
slsh
:; fungsi output tidak diperlukan, hanya;
terminator):Tcl (mode interaktif
tclsh
:; fungsi output tidak diperlukan, tetapiexpr
adalah):Kerang Javascript :
Berbagai SQL:
SQLite (mode interaktif:)
sqlite3
:MySQL :
PostgreSQL :
_Pilihan pada mysql dan postgres menghentikan gambar 'ascii art'!
Bahasa berorientasi matematika khusus:
R dalam mode biasa - memungkinkan menghasilkan 1000 angka acak Normal dan mendapatkan simpangan baku dan mencetaknya
R menggunakan skrip littler - memungkinkan cetak pi kuadrat
PARI / GP , sistem aljabar komputer yang luas untuk teori bilangan, aljabar linier, dan banyak hal lainnya
GNU Octave (bahasa interpretasi tingkat tinggi, terutama ditujukan untuk perhitungan numerik)
Juga mendukung bilangan kompleks:
Julia , bahasa kinerja tinggi dan juru bahasa untuk komputasi ilmiah dan numerik.
Opsi non-interaktif:
sumber
whatis bc
->An arbitrary precision calculator language
Menarik! Terima kasih!dc
, yang bahkan lebih menyenangkan karena bekerja dengan notasi polish terbalik.echo 20 5 + p | dc
Tetapi tidak praktis jika Anda tidak banyak bekerja dengan notasi polish terbalik.## Command line calculator calc () { bc -l <<< "$@" }
math
builtin baru mereka (atau apa pun namanya sekarang) saat kita bicara. Jangan ragu untuk mengedit. Itu bukan jawaban saya dan itu adalah wiki komunitas.Ada banyak cara untuk menghitung. Untuk ekspresi sederhana, Anda dapat menggunakannya
bash
sendiri:atau
expr
:Dan untuk kasus rumit ada alat yang hebat
bc
:Btw, bc dapat menghitung bahkan ekspresi yang sangat kompleks dengan akar, logaritma, cos, dosa dan sebagainya.
sumber
expr
opsi Anda ke jawaban yang diterima. Harus memilih satu untuk menerima dan memusatkan.expr 20+5
. Anda perlu mengetik spasi antara angka dan ditambah untuk membuatnya bekerja:expr 20 + 5
. Itu penting.Solusi yang disebutkan baik untuk perhitungan yang sangat sederhana, tetapi sangat rawan kesalahan. Contoh:
Kesalahan sintaksis seperti yang terakhir mudah diketahui, tetapi respons bilangan bulat dengan bagian float yang dibuang dapat dengan mudah diketahui dan menyebabkan hasil yang salah.
Itu sebabnya saya selalu menggunakan bahasa scripting seperti Lua untuk itu. Tetapi Anda dapat memilih bahasa skrip apa pun yang Anda kenal. Saya hanya menggunakan Lua sebagai contoh. Keuntungannya adalah
Contoh:
sumber
bc
Hasilnya bukan bilangan bulat, hanya dibulatkan kescale
, yang nilai defaultnya adalah 0. Jadibc <<< 'scale=4;9.0/2.0'
jika Anda ingin bagian pecahan.scale
jika saya gunakanbc
dalam beberapa minggu? Mungkin tidak. Dan bahkan jika ada cara untuk mengubahnya secara permanen, itu akan menggigit Anda jika Anda berada di sistem dengan pengaturan default.scale
sejak saya bertemubc
pertama kali tahun lalu. Tapi aku selalu lupa apakah fungsi output dalamlua
adalahput
atauputs
. ;)bc -l
daripada biasabc
, maka jangan pernah khawatirscale
.Belum ada yang menyebut awk?
Menggunakan fungsi shell POSIX, dan kekuatan matematika awk, cukup tentukan fungsi (satu baris) ini:
Kemudian jalankan saja hal-hal seperti
calc 1+1
ataucalc 5/2
Catatan: Untuk membuat fungsi selalu tersedia, tambahkan ke ~ / .bashrc (atau file startup shell Anda yang sesuai)
Tentu saja, skrip kecil bernama "calc" dengan konten berikut:
bisa juga bekerja.
sumber
a=0; b=0.0; if echo "$a" "$b" | awk '{ exit ($1 == $2) ? 0 : 1 }'; then echo 'equals'; else echo 'not equals'; fi
Anda bisa menggunakannya
bc
. Misalnya,Atau
bc <<< 25+5
juga akan bekerja.Atau secara interaktif, jika Anda ingin melakukan lebih dari satu perhitungan sederhana:
Implementasi GNU dari
bc
cetakan yang header / info hak cipta saat start-up ketika stdin dan stdout pergi ke terminal. Anda dapat menekannya dengan opsi (khusus GNU)-q
. Untuk informasi lebih lanjut lihat halaman manual bcsumber
ctrl-d
keluar?quit
c () { bc -l <<< "$@" }
akan menentukan fungsic
untuk penggunaan yang cepat dan mudah. misalnyac 3/2
akan memberi Anda1.50000000000000000000
. Tautan di atas menjelaskan cara melakukannya sudah mati.Anda bisa menggunakan
calc
:Jika Anda hanya memasukkan
calc
tanpa argumen lain itu memasuki mode interaktif di mana Anda bisa terus melakukan matematika. Anda keluar dari ini dengan mengetikkan keluar:Atau Anda menggunakannya dengan ekspresi sebagai argumen dan itu akan memberikan jawaban dan kemudian keluar
calc
mirip denganbc
, saya hanya suka cara berperilaku sebagai default lebih baiksumber
calc -e '2+4; 3+5; 3.4+5; 2^4
mencetak 4 jalur output, atau hanyacalc -e 33+(3^3)
.. +1 Saya menyukai gagasan menggunakan sesuatu yang disebut 'calc' untuk kalkulator :)-e
opsi tidak diperlukan ketika hanya ada satu ekspresi ... rapi! ..Saya suka menyalakan Python dan menggunakannya sebagai kalkulator interaktif (tapi sekali lagi, saya seorang programmer Python).
sumber
screen
hanya dengan menjalankan Python.Karena tidak ada orang lain yang menyebutkannya, dan meskipun ini bukan sepenuhnya kalkulator (tetapi tidak semua bahasa scripting untuk tujuan umum ini), saya ingin menyebutkan
units
:Atau, untuk output yang lebih sedikit sehingga Anda bisa mendapatkan nomor yang akan digunakan
$()
untuk menetapkan sesuatu:Dan bahkan konversi suhu
Untuk mendapatkan konversi suhu dalam ekspresi untuk perhitungan lebih lanjut, lakukan ini:
sumber
Juga
ghci
, itu adalah Glasgow-Haskell Compiler dalam mode interaktif (ghc --interactive
, yang bertentangan dengan itu mengevaluasi ekspresi dengan-e
), membuat "kalkulator" yang menarik:sumber
ghc
artinya Glasgow Haskell Compiler?Saya tidak percaya untuk membaca "kekuatan JavaScript" (tapi saya harus membatalkan jawaban untuk bagian lain, kecuali perl tentu saja.
Secara praktis, untuk kasus-kasus sederhana di mana aritmatika integer cukup, saya menggunakan $ buildin ((...)) dan merekomendasikannya. Lain, dalam hampir semua kasus gema "..." | bc sudah cukup.
Untuk beberapa operasi aritmatika seperti statistik, operasi matriks, dan lainnya
R
adalah alat yang lebih baik:dan untuk dataset kecil dan hasil grafis yang dibuang,
oocalc
adalah utilitas yang bagus.sumber
Saya menggunakan skrip python kecil yang akan mengevaluasi ekspresi python dan mencetak hasilnya, maka saya dapat menjalankan sesuatu seperti
skripnya adalah:
Sayangnya saya tidak ingat dari mana saya meminjam sebagian besar kode, jadi saya tidak bisa mengutipnya.
sumber
print(eval(' '.join(sys.argv[1:])))
melakukan hal yang sama?Gnuplot
gnuplot - program merencanakan interaktif
Ikuti tautan di atas atau ketik
gnuplot
form prompt kemudianhelp
di dalaminterpreter gnuplot .Gnuplot adalah program yang lahir untuk memplot data, tetapi juga dapat digunakan untuk perhitungan. Ini menawarkan keuntungan bahwa Anda dapat mendefinisikan fungsi dan atau menggunakan yang built-in.
Root (atau juru bahasa C lainnya )
Anda dapat menggunakannya sebagai interpreter C , CINT , atau Anda dapat menggunakan salah satu dari banyak banyak juru bahasa C lainnya . IMHO, itu besar, kompleks, kuat, dan tidak selalu ramah tetapi dapat memberikan kepuasan besar juga.
Jika Anda benar-benar tidak ingin mendengarkan suara kecil di dalam diri Anda yang mengutip Confucio dan Anda siap untuk mematahkan (mentega) lalat di atas roda Anda dapat menggunakan root . Dalam hal
-l
ini wajib untuk menghindari menampilkan layar splash ...sumber
Untuk hitung bilangan bulat (di mana 3/2 = 1)
bash
echo $(( 1+1 ))
fish
math 1+1
zsh*
echo $((1+1))
*: dan ksh93, yash
Untuk aritmatika floating point (di mana 3/2 = 1.5)
bash
awk "BEGIN {print 10/3}"
(presisi rendah)bash
echo "10/3"|bc -l
(presisi tinggi)fish
math -s4 10/3
zsh*
echo $((10./3))
*: dan ksh93, yash
Anda tentu saja dapat mengkonfigurasi shell Anda untuk menggunakan awk dengan mengetik seperti minimum
calc 10/3
(lihat catatan tentang bagaimana melakukannya untuk bash 1 dan fish 2 ).Alasan utama untuk menyarankan awk untuk bash adalah karena sudah diinstal pada hampir semua OS mirip Unix dan cukup ringan (tentu saja ada biaya memulai proses) dengan output
bc -l
yang kurang tepat tetapi lebih ramah manusia daripada yang mencetak 20 desimal digit (meskipun Anda tentu saja dapat mengubah awk untuk mendapatkan lebih banyak angka desimal ).Catatan
(1) Cara menggunakan sintaks yang disederhanakan dalam bash
Tambahkan fungsi bash ini ke
~/.bashrc
:(2) Cara menggunakan sintaks yang disederhanakan pada ikan
Buat
calc
fungsi ikan (yaitu file teks bernama/home/ndemou/.config/fish/functions/calc.fish
):sumber
awk
akan menggunakandouble
tipe floating point sistem Anda , jadi akan sama akuratnya dengan sebagian besar alat lain yang tidak melakukan presisi sembarang (perhatikan bahwa gawk dapat melakukan presisi sembarang).awk
menggunakanOFMT
variabel untuk mengonversi angka ke representasi string mereka untuk keluaran (%.6g
secara default, Anda mungkin ingin mengubahnya menjadi%.17g
Anda menginginkan presisi yang lebih tinggi ).fish
itumath
hanya fungsi yang memanggilbc
(meskipun itu akan berubah )bc
. Ini tidak lagi dalam versi yang lebih baru di mana hal-hal sepertimath "scale=4; 10/3"
tidak akan berfungsi lagi (math -s4 10/3
bukan sekarang)math -s4
tampaknya didukung dalam versi yang lebih lama juga)Untuk perhitungan konsol, saya menggunakan
concalc
. (sudo aptitude install concalc
)Setelah itu, cukup ketik
concalc
dan tekan enter. Itu tidak akan memberikan prompt, tetapi cukup ketik dalam perhitungan Anda (tanpa spasi) dan tekan enter, dan pada baris berikutnya, itu akan memberi Anda nilai numerik.sumber
SQLite :
MySQL :
PostgreSQL :
sumber
from dual
diperlukan oleh Oracle, MySQL dapatselect
tanpafrom
klausa. 2) PostgreSQL tidak membutuhkan alias. 3);
Hanya diperlukan oleh SQLite. 4) MySQL dan PostgreSQL hanya akan berfungsi jika mereka dapat terhubung ke server database. 5) MySQL dan PostgreSQL akan menggambar tabel ASCII-art di sekitar hasilnya. Untuk hanya mendapatkan nilai:mysql -BNe 'select 1+1'
danpsql -tAc 'select 1+1
.Gunakan Perpustakaan Aritmatika Presisi Ganda GNU melalui
run-expr
program yang disediakan :tar -xvf gmp-5.1.3.tar.lz
./configure
danmake
(tidak perlu menginstal)make run-expr
~/bin
direktori saya :ln -s /path/to/gmp/demos/expr/run-expr ~/bin/run-expr
alias calcf='run-expr -f'
untuk evaluasi floating pointKeluaran:
Dari
run-expr.c
file:Lihat manual untuk perbedaan dan detail kelas fungsi.
sumber