如何在 bash 或其他語言/框架中進行整數和浮點計算?
echo "20+5"
從字面上使用會產生文本“20+5
”。在這種情況下,我可以使用什麼命令來獲取數字總和
25
?此外,僅使用 bash 進行浮點運算的最簡單方法是什麼?例如,
echo $((3224/3807.0))
列印0
:(。我正在使用基本命令外殼(“命令行”)本身或通過使用命令行中可用的語言來尋找答案。
有很多選擇!!!
概括
$ printf %.10f\\n "$((10**9 * 20/7))e-9" # many shells. Not mksh. $ echo "$((20.0/7))" # (ksh93/zsh/yash, some 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 $ gs -q <<< "5 2 div 20 add ="
細節
貝殼
您可以將 POSIX 算術擴展用於整數算術**
echo "$((...))"
**:$ echo "$((20+5))" 25 $ echo "$((20+5/2))" 22
相當便攜**
ash dash yash bash ksh93 lksh zsh
**($ 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
shell 家族中,akanga
是具有算術擴展的:; echo $:25/3 8
POSIX 工具箱
bc
(互動模式見下文),此處為手冊助記符:
b
estc
alculator (儘管b
實際上是basic)。$ 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
Rush的解決方案,
expr
(無互動模式):$ expr 20 + 5 25 $ expr 20 + 5 / 2 22
約書亞的解決方案:(**
awk
**無互動模式):$ calc() { awk "BEGIN{print $*}"; } $ calc 1/3 0.333333
其他或多或少的便攜工具
Arcege的解決方案,
dc
(互動模式:)dc
:這更有趣,因為它通過反向波蘭符號工作。
$ echo 20 5 2 / + p | dc 22 $ echo 4 k 20 5 2 / + p | dc 22.5000
但除非你經常使用反向波蘭符號,否則它並不實用。
請注意,它
dc
早於bc
並且bc
在歷史上被實現為包裝器,dc
但dc
未被 POSIX 標準化DQdims的**
calc
**(必需sudo apt-get install apcalc)
:$ calc 2 + 4 6
通用語言口譯員:
manatwork的解決方案,
node
(互動模式: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)"
Marco的解決方案,
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外殼:
$ 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
_mysql 和 postgres 上的選項停止“ascii 藝術”圖像!
專門面向數學的語言:
普通模式下的R - 讓我們生成 1000 個正常隨機數並獲取標準偏差並列印它
$ R -q -e 'print(sd(rnorm(1000)))' > print(sd(rnorm(1000))) [1] 1.031997
R使用更小的腳本 - 讓我們列印 pi squared
$ 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
GhostScript GhostScript 是 PostScript 解釋器,即使在非常舊的發行版中也很常見。
有關受支持的數學命令的列表,請參閱PostScript 文件。
互動範例:
$ GS_DEVICE=display gs GPL Ghostscript 9.07 (2013-02-14) Copyright (C) 2012 Artifex Software, Inc. All rights reserved. This software comes with NO WARRANTY: see the file PUBLIC for details. GS>5 2 div 20 add = 22.5 GS>