มีตัวเลือกมากมาย !!!
สรุป
$ 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
รายละเอียด
เปลือกหอย
คุณสามารถใช้ POSIX การขยายตัวทางคณิตศาสตร์สำหรับจำนวนเต็มคณิตศาสตร์echo "$((...))"
:
$ echo "$((20+5))"
25
$ echo "$((20+5/2))"
22
ค่อนข้างพกพา ( ash dash yash bash ksh93 lksh zsh
):
การใช้ความสามารถ printf ในการพิมพ์ลอยเราสามารถขยายเชลล์ส่วนใหญ่เพื่อทำคณิตศาสตร์เลขทศนิยมในช่วงที่ จำกัด (ไม่เกิน 10 หลัก):
$ printf %.10f\\n "$((1000000000 * 20/7 ))e-9"
2.8571428570
ksh93
, yash
และzsh
ทำลอยสนับสนุนที่นี่:
$ echo "$((1.2 / 3))"
0.4
เฉพาะksh93
(โดยตรง) และzsh
โหลดไลบรารี mathfunc ที่นี่:
$ echo "$((4*atan(1)))"
3.14159265358979324
( zsh
ต้องโหลดzmodload zsh/mathfunc
เพื่อรับฟังก์ชั่นเหมือนatan
)
โต้ตอบกับ zsh:
$ autoload zcalc
$ zcalc
1> PI/2
1.5708
2> cos($1)
6.12323e-17
3> :sci 12
6.12323399574e-17
ด้วย (t) csh (จำนวนเต็มเท่านั้น):
% @ a=25 / 3; echo $a
8
ในrc
ตระกูลเชลล์akanga
คืออันที่มีส่วนขยายทางคณิตศาสตร์:
; echo $:25/3
8
POSIX toolchest
bc
(ดูด้านล่างสำหรับโหมดโต้ตอบ), คู่มือที่นี่
Mnemonic: best calculator (แม้ว่าจะb
เป็นจริงสำหรับพื้นฐาน )
$ echo 20+5/2 | bc
22
$ echo 'scale=4;20+5/2' | bc
22.5000
(รองรับหมายเลขความแม่นยำโดยพลการ)
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
โซลูชันของRushexpr
(ไม่มีโหมดโต้ตอบ):
$ expr 20 + 5
25
$ expr 20 + 5 / 2
22
ทางออกของโจชัว : awk
(ไม่มีโหมดโต้ตอบ):
$ calc() { awk "BEGIN{print $*}"; }
$ calc 1/3
0.333333
เครื่องมือพกพาอื่น ๆ มากหรือน้อย
วิธีแก้ปัญหาของArcegedc
(โหมดโต้ตอบ:)dc
:
ซึ่งสนุกกว่านี้เพราะทำงานโดยใช้สัญลักษณ์ขัดเงาย้อนกลับ
$ echo 20 5 2 / + p | dc
22
$ echo 4 k 20 5 2 / + p | dc
22.5000
แต่ไม่สามารถใช้งานได้จริงเว้นแต่ว่าคุณจะทำงานกับสัญกรณ์ขัดกลับด้านจำนวนมาก
โปรดทราบว่าdc
มีการถือกำเนิดbc
และbc
มีการใช้งานในอดีตเป็น wrapper รอบ ๆdc
แต่dc
ไม่ได้มาตรฐานโดย POSIX
DQdims 's calc
(จำเป็นsudo apt-get install apcalc)
:
$ calc 2 + 4
6
ล่ามภาษาที่ใช้งานทั่วไป:
โซลูชันของmanatworknode
(โหมดโต้ตอบ: node
ไม่จำเป็นต้องใช้ฟังก์ชั่นเอาท์พุท):
$ node -pe 20+5/2 # Uses the power of JavaScript, e.g. : node -pe 20+5/Math.PI
22.5
Perl (โหมดโต้ตอบ:) perl -de 1
:
$ perl -E "say 20+5/2"
22.5
Python (โหมดโต้ตอบ: python
ไม่จำเป็นต้องใช้ฟังก์ชั่นเอาต์พุต):
$ python -c "print(20+5/2)"
22 # 22.5 with python3
$ python -c "print(20+5/2.0)"
22.5
ยังรองรับตัวเลขที่มีความแม่นยำตามอำเภอใจ:
$ python -c 'print(2**1234)'
295811224608098629060044695716103590786339687135372992239556207050657350796238924261053837248378050186443647759070955993120820899330381760937027212482840944941362110665443775183495726811929203861182015218323892077355983393191208928867652655993602487903113708549402668624521100611794270340232766099317098048887493809023127398253860618772619035009883272941129544640111837184
หากคุณclisp
ติดตั้งแล้วคุณยังสามารถใช้สัญลักษณ์ขัดเงา:
$ clisp -x "(+ 2 2)"
โซลูชันของมาร์โกlua
(โหมดโต้ตอบ:) lua
:
$ lua -e "print(20+5/2)"
22.5
PHP (โหมดโต้ตอบ:) php -a
:
$ php -r 'echo 20+5/2;'
22.5
Ruby (โหมดโต้ตอบ: irb
ไม่จำเป็นต้องใช้ฟังก์ชั่นเอาต์พุต):
$ ruby -e 'p 20+5/2'
22
$ ruby -e 'p 20+5/2.0'
22.5
Guile (โหมดโต้ตอบ:)guile
:
$ guile -c '(display (+ 20 (/ 5 2)))'
45/2
$ guile -c '(display (+ 20 (/ 5 2.0)))'
22.5
S-Lang (โหมดโต้ตอบ: slsh
ฟังก์ชั่นการส่งออกไม่จำเป็นต้องเป็นเพียงแค่;
เทอร์มิ):
$ slsh -e 'printf("%f",20+5/2)'
22.000000
$ slsh -e 'printf("%f",20+5/2.0)'
22.500000
Tcl (โหมดโต้ตอบ: tclsh
ไม่จำเป็นต้องใช้ฟังก์ชั่นเอาต์พุต แต่expr
เป็น):
$ tclsh <<< 'puts [expr 20+5/2]'
22
$ tclsh <<< 'puts [expr 20+5/2.0]'
22.5
Javascript shells:
$ 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
>
SQL ต่างๆ:
SQLite (โหมดโต้ตอบ:) 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
_The ตัวเลือกใน mysql และ postgres หยุดภาพ 'ascii art'!
ภาษาเชิงคณิตศาสตร์เฉพาะทาง:
Rในโหมด plain - อนุญาตให้สร้างตัวเลขสุ่ม 1,000 ปกติแล้วรับส่วนเบี่ยงเบนมาตรฐานแล้วพิมพ์
$ R -q -e 'print(sd(rnorm(1000)))'
> print(sd(rnorm(1000)))
[1] 1.031997
Rใช้สคริปต์littler - อนุญาตให้พิมพ์ pi กำลังสอง
$ r -e 'cat(pi^2, "\n")'
9.869604
$ r -e 'print(sum(1:100))'
[1] 5050
PARI / GPระบบพีชคณิตคอมพิวเตอร์ที่ครอบคลุมสำหรับทฤษฎีจำนวนเชิงพีชคณิตเชิงเส้นและอื่น ๆ อีกมากมาย
$ 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 (ภาษาที่ตีความในระดับสูงมีไว้เพื่อการคำนวณเชิงตัวเลขเป็นหลัก)
รองรับจำนวนเชิงซ้อน:
$ octave
>> 1.2 / 7
ans = 0.17143
>> sqrt(-1)
ans = 0 + 1i
Juliaภาษาที่มีประสิทธิภาพสูงและล่ามสำหรับการคำนวณทางวิทยาศาสตร์และตัวเลข
ตัวเลือกที่ไม่โต้ตอบ:
$ julia -E '2.5+3.7'
6.2
bc
อาจเป็นเรื่องคุ้มค่าที่คุณจะต้องอ่านเกี่ยวกับ-l
ตัวเลือกใน man page