Có rất nhiều lựa chọn!!!
Tóm lược
$ printf %.10f\\n "$((10**9 * 20/7))e-9" # many shells. Not mksh.
$ echo "$((20.0/7))" # (ksh93/zsh/yash, not bash)
$ awk "BEGIN {print (20+5)/2}"
$ zcalc
$ bc <<< 20+5/2
$ bc <<< "scale=4; (20+5)/2"
$ dc <<< "4 k 20 5 + 2 / p"
$ expr 20 + 5
$ calc 2 + 4
$ node -pe 20+5/2 # Uses the power of JavaScript, e.g. : node -pe 20+5/Math.PI
$ echo 20 5 2 / + p | dc
$ echo 4 k 20 5 2 / + p | dc
$ perl -E "say 20+5/2"
$ python -c "print(20+5/2)"
$ python -c "print(20+5/2.0)"
$ clisp -x "(+ 2 2)"
$ lua -e "print(20+5/2)"
$ php -r 'echo 20+5/2;'
$ ruby -e 'p 20+5/2'
$ ruby -e 'p 20+5/2.0'
$ guile -c '(display (+ 20 (/ 5 2)))'
$ guile -c '(display (+ 20 (/ 5 2.0)))'
$ slsh -e 'printf("%f",20+5/2)'
$ slsh -e 'printf("%f",20+5/2.0)'
$ tclsh <<< 'puts [expr 20+5/2]'
$ tclsh <<< 'puts [expr 20+5/2.0]'
$ sqlite3 <<< 'select 20+5/2;'
$ sqlite3 <<< 'select 20+5/2.0;'
$ echo 'select 1 + 1;' | sqlite3
$ psql -tAc 'select 1+1'
$ R -q -e 'print(sd(rnorm(1000)))'
$ r -e 'cat(pi^2, "\n")'
$ r -e 'print(sum(1:100))'
$ smjs
$ jspl
Chi tiết
Vỏ ốc
Bạn có thể sử dụng mở rộng số học POSIX cho số học số nguyênecho "$((...))"
:
$ echo "$((20+5))"
25
$ echo "$((20+5/2))"
22
Khá di động ( ash dash yash bash ksh93 lksh zsh
):
Sử dụng khả năng printf để in nổi, chúng ta có thể mở rộng hầu hết các shell để thực hiện phép toán dấu phẩy động mặc dù trong phạm vi giới hạn (không quá 10 chữ số):
$ printf %.10f\\n "$((1000000000 * 20/7 ))e-9"
2.8571428570
ksh93
, yash
Và zsh
làm nổi hỗ trợ ở đây:
$ echo "$((1.2 / 3))"
0.4
chỉ ksh93
(trực tiếp) và zsh
tải thư viện mathfunc tại đây:
$ echo "$((4*atan(1)))"
3.14159265358979324
( zsh
cần tải zmodload zsh/mathfunc
để có được chức năng như atan
).
Tương tác với zsh:
$ autoload zcalc
$ zcalc
1> PI/2
1.5708
2> cos($1)
6.12323e-17
3> :sci 12
6.12323399574e-17
Với (t) csh (chỉ số nguyên):
% @ a=25 / 3; echo $a
8
Trong họ rc
shell, akanga
là nhóm có mở rộng số học:
; echo $:25/3
8
Công cụ POSIX
bc
(xem bên dưới để biết chế độ tương tác), hướng dẫn tại đây
Mnemonic: best calculator (mặc dù b
trên thực tế là cơ bản ).
$ echo 20+5/2 | bc
22
$ echo 'scale=4;20+5/2' | bc
22.5000
(hỗ trợ số chính xác tùy ý)
chế độ tương tác bc:
$ bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
5+5
10
2.2+3.3
5.5
Giải pháp của Rush , expr
(không có chế độ tương tác):
$ expr 20 + 5
25
$ expr 20 + 5 / 2
22
Giải pháp của Joshua : awk
(không có chế độ tương tác):
$ calc() { awk "BEGIN{print $*}"; }
$ calc 1/3
0.333333
Các công cụ di động khác ít nhiều
Giải pháp của Arcege , dc
(chế độ tương tác dc
:):
Điều đó thậm chí còn thú vị hơn vì nó hoạt động bằng ký hiệu đánh bóng ngược.
$ echo 20 5 2 / + p | dc
22
$ echo 4 k 20 5 2 / + p | dc
22.5000
Nhưng không thực tế trừ khi bạn làm việc với ký hiệu đánh bóng ngược rất nhiều.
Lưu ý rằng dc
có trước bc
và bc
đã được thực hiện trong lịch sử như là một wrapper xung quanh dc
nhưng dc
đã không được chuẩn hóa bởi POSIX
DQdims 's calc
(bắt buộc sudo apt-get install apcalc)
:
$ calc 2 + 4
6
Thông dịch viên ngôn ngữ mục đích chung:
Giải pháp của manatwork , node
(chế độ tương tác : node
; không cần chức năng đầu ra):
$ node -pe 20+5/2 # Uses the power of JavaScript, e.g. : node -pe 20+5/Math.PI
22.5
Perl (chế độ tương tác perl -de 1
:):
$ perl -E "say 20+5/2"
22.5
Python (chế độ tương tác : python
; không cần chức năng đầu ra):
$ python -c "print(20+5/2)"
22 # 22.5 with python3
$ python -c "print(20+5/2.0)"
22.5
Cũng hỗ trợ số chính xác tùy ý:
$ python -c 'print(2**1234)'
295811224608098629060044695716103590786339687135372992239556207050657350796238924261053837248378050186443647759070955993120820899330381760937027212482840944941362110665443775183495726811929203861182015218323892077355983393191208928867652655993602487903113708549402668624521100611794270340232766099317098048887493809023127398253860618772619035009883272941129544640111837184
Nếu bạn đã clisp
cài đặt, bạn cũng có thể sử dụng ký hiệu đánh bóng:
$ clisp -x "(+ 2 2)"
Giải pháp của Marco , lua
(chế độ tương tác lua
:):
$ lua -e "print(20+5/2)"
22.5
PHP (chế độ tương tác php -a
:):
$ php -r 'echo 20+5/2;'
22.5
Ruby (chế độ tương tác : irb
; không cần chức năng đầu ra):
$ ruby -e 'p 20+5/2'
22
$ ruby -e 'p 20+5/2.0'
22.5
Guile (chế độ tương tác guile
:):
$ guile -c '(display (+ 20 (/ 5 2)))'
45/2
$ guile -c '(display (+ 20 (/ 5 2.0)))'
22.5
S-Lang (chế độ tương tác : slsh
; không cần chức năng đầu ra, chỉ cần một bộ ;
kết thúc):
$ slsh -e 'printf("%f",20+5/2)'
22.000000
$ slsh -e 'printf("%f",20+5/2.0)'
22.500000
Tcl (chế độ tương tác : tclsh
; không cần chức năng đầu ra, nhưng expr
là):
$ tclsh <<< 'puts [expr 20+5/2]'
22
$ tclsh <<< 'puts [expr 20+5/2.0]'
22.5
Vỏ Javascript :
$ smjs
js> 25/3
8.333333333333334
js>
$ jspl
JSC: 25/3
RP: 8.33333333333333
RJS: [object Number]
JSC:
Good bye...
$ node
> 25/3
8.333333333333334
>
Nhiều SQL khác nhau:
SQLite (chế độ tương tác sqlite3
:):
$ sqlite3 <<< 'select 20+5/2;'
22
$ sqlite3 <<< 'select 20+5/2.0;'
22.5
MySQL :
mysql -BNe 'select 1+1'
PostgreSQL :
psql -tAc 'select 1+1
_Các tùy chọn trên mysql và postgres dừng hình ảnh 'nghệ thuật ascii'!
Các ngôn ngữ định hướng toán học chuyên ngành:
R ở chế độ đơn giản - cho phép tạo 1000 số ngẫu nhiên Bình thường và nhận được độ lệch chuẩn và in nó
$ R -q -e 'print(sd(rnorm(1000)))'
> print(sd(rnorm(1000)))
[1] 1.031997
R sử dụng tập lệnh littler - cho phép in bình phương pi
$ r -e 'cat(pi^2, "\n")'
9.869604
$ r -e 'print(sum(1:100))'
[1] 5050
PARI / GP , một hệ thống đại số máy tính mở rộng cho lý thuyết số, đại số tuyến tính và nhiều thứ khác
$ echo "prime(1000)"|gp -q
7919 // the 1000th prime
$ echo "factor(1000)" | gp -q
[2 3]
[5 3] // 2^3*5^3
$ echo "sum(x=1,5,x)" | gp -q
15 // 1+2+3+4+5
GNU Octave (một ngôn ngữ được giải thích ở cấp độ cao, chủ yếu dành cho tính toán số)
Cũng hỗ trợ số phức:
$ octave
>> 1.2 / 7
ans = 0.17143
>> sqrt(-1)
ans = 0 + 1i
Julia , ngôn ngữ hiệu suất cao và thông dịch viên cho máy tính khoa học và số.
Tùy chọn không tương tác:
$ julia -E '2.5+3.7'
6.2
bc
, có thể đáng để bạn đọc về-l
tùy chọn trong trang người đàn ông.