बश या अन्य भाषाओं / रूपरेखाओं में पूर्णांक और फ्लोट गणना कैसे करें?


294

echo "20+5"वस्तुतः " 20+5" का उपयोग करके पाठ का निर्माण होता है ।

मैं 25इस मामले में संख्यात्मक योग प्राप्त करने के लिए किस कमांड का उपयोग कर सकता हूं ?

इसके अलावा, फ्लोटिंग पॉइंट के लिए बस बैश का उपयोग करने का सबसे आसान तरीका क्या है? उदाहरण के लिए, echo $((3224/3807.0))प्रिंट 0:(।

मैं या तो मूल कमांड शेल ('कमांड लाइन') का उपयोग करके या कमांड लाइन से उपलब्ध भाषाओं का उपयोग करके उत्तर ढूंढ रहा हूं।


1
यदि आप साथ जा रहे हैं bc, तो -lमैन पेज में विकल्प के बारे में पढ़ना आपके समय के लायक हो सकता है ।
ग्लेन जैकमैन

मुझे लगता है कि लेखक बैश कमांड लाइन के लिए पूछ रहा है, जबकि सभी उत्तर सभी प्रकार की स्क्रिप्टिंग भाषाओं में विविधता लाते हैं।
zinking

2
आदमी बैश → / अभिव्यक्ति
ДМИТРИА МАЛИКОВ

1
@ ज़िन्किंग वेल, बैश आसानी से अन्य स्क्रिप्टिंग भाषा की एक बड़ी संख्या के लिए दुभाषियों को आसानी से आह्वान करने में सक्षम होने के लिए डिज़ाइन किया गया है।
रैंडम 832

अस्थायी बिंदु परिणामों के साथ बैश पूर्णांक विभाजन सिखाएं: stackoverflow.com/a/24431665/3776858
साइरस

जवाबों:


399

बहुत सारे विकल्प हैं !!!

सारांश

$ 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):
फ्लोट को प्रिंट करने की क्षमता का उपयोग करके हम सीमित सीमा के साथ फ्लोटिंग पॉइंट गणित को करने के लिए अधिकांश गोले बढ़ा सकते हैं (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)।


अंत में ज़ीश के साथ:

$ 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 टूलकिट

bc(इंटरेक्टिव मोड के लिए नीचे देखें), यहाँ मैनुअल

Mnemonic: bस्था calculator (हालांकि मूल केb लिए वास्तव में है )।

$ echo 20+5/2 | bc
22
$ echo 'scale=4;20+5/2' | bc
22.5000

(मनमाना सटीक संख्याओं का समर्थन करता है)


बीसी इंटरैक्टिव मोड:

$ 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

रश का समाधान, expr(कोई संवादात्मक मोड):

$ expr 20 + 5
25
$ expr 20 + 5 / 2
22

यहोशू का समाधान : awk(कोई इंटरैक्टिव मोड):

$ calc() { awk "BEGIN{print $*}"; }
$ calc 1/3
0.333333

अन्य अधिक या कम पोर्टेबल उपकरण

एर्स के समाधान, dc(इंटरेक्टिव मोड :)dc :

यह और भी मजेदार है क्योंकि यह रिवर्स पॉलिश नोटेशन द्वारा काम करता है।

$ echo 20 5 2 / + p | dc 
22
$ echo 4 k 20 5 2 / + p | dc 
22.5000

लेकिन तब तक व्यावहारिक नहीं जब तक आप रिवर्स पॉलिश नोटेशन के साथ काम नहीं करते।

ध्यान दें कि dcपूर्ववर्ती bcऔर bcऐतिहासिक रूप से एक आवरण के रूप में कार्यान्वित किया गया है, dcलेकिन dcPOSIX द्वारा मानकीकृत नहीं किया गया था


DQdims की calcआवश्यकता sudo apt-get install apcalc):

$ calc 2 + 4
6

सामान्य प्रयोजन भाषा व्याख्याकार:

मैनेटवर्क का समाधान, node(इंटरैक्टिव मोड node:; आउटपुट फ़ंक्शन की आवश्यकता नहीं):

$ node -pe 20+5/2  # Uses the power of JavaScript, e.g. : node -pe 20+5/Math.PI
22.5

पर्ल (इंटरैक्टिव मोड :)perl -de 1 :

$ perl -E "say 20+5/2"
22.5

पायथन (इंटरैक्टिव मोड 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

रूबी (इंटरैक्टिव मोड irb:; उत्पादन समारोह की जरूरत नहीं):

$ ruby -e 'p 20+5/2'
22
$ ruby -e 'p 20+5/2.0'
22.5

गुइल (इंटरैक्टिव मोड :)guile :

$ guile -c '(display (+ 20 (/ 5 2)))'
45/2
$ guile -c '(display (+ 20 (/ 5 2.0)))'
22.5

एस-लैंग (इंटरैक्टिव मोड 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

जावास्क्रिप्ट गोले:

$ 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
>

विभिन्न एसक्यूएल:

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 कला' छवि को रोकते हैं!

विशिष्ट गणित-उन्मुख भाषाएँ:

सादे मोड में आर - 1000 सामान्य यादृच्छिक संख्या उत्पन्न करता है और मानक विचलन प्राप्त करता है और इसे प्रिंट करता है

$ R -q -e 'print(sd(rnorm(1000)))'
> print(sd(rnorm(1000)))
[1] 1.031997

आर का उपयोग कर के रूप में बड़ा स्क्रिप्ट - प्रिंट अनुकरणीय चुकता करने देता है

$ 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
>> 1.2 / 7
ans =  0.17143
>> sqrt(-1)
ans =  0 + 1i

जूलिया , उच्च प्रदर्शन वाली भाषा और वैज्ञानिक और संख्यात्मक कंप्यूटिंग के लिए दुभाषिया।

गैर-इंटरैक्टिव विकल्प:

$ julia -E '2.5+3.7'
6.2

3
और बीसी दिलचस्प है: whatis bc-> An arbitrary precision calculator language दिलचस्प! धन्यवाद!
माइकल डुरंट

@MichaelDurrant क्या आप अपने संपादन पुन: संशोधित कर सकते हैं, मुझे गलती से अस्वीकार कर दिया गया होगा?
लार्जो

4
वहाँ भी है dc, जो और भी मजेदार है क्योंकि यह रिवर्स पॉलिश नोटेशन द्वारा काम करता है। echo 20 5 + p | dc लेकिन तब तक व्यावहारिक नहीं जब तक आप रिवर्स पॉलिश नोटेशन के साथ काम नहीं करते।
Arsege

2
बीसी दृष्टिकोण पर एक बदलाव के रूप में, मैंने अपने .bashrc फ़ाइल में निम्नलिखित फ़ंक्शन (जो मुझे स्टैकएक्सचेंज पर कहीं मिला है) जोड़ा। मैं सिर्फ कैल्क 2 + 3 दर्ज कर सकता हूं और 5. प्राप्त कर सकता हूं ## Command line calculator calc () { bc -l <<< "$@" }
जो

1
@ क्रिस, मछली एक चलती लक्ष्य है। mathजैसा कि हम बोलते हैं वे अपने नए बिलिन (या अब जो भी कहते हैं) पर काम कर रहे हैं। बेझिझक संपादित करें। यह मेरा जवाब नहीं है और यह सामुदायिक विकि है।
स्टीफन चेज़लस

35

गणना करने के कई तरीके हैं। सरल अभिव्यक्तियों के लिए आप bashस्वयं का उपयोग कर सकते हैं :

echo $((20+5))

या expr:

expr 20 + 5

और जटिल मामलों के लिए महान उपकरण है bc:

echo "20+5" | bc

Btw, bc जड़ों, लघुगणक, ब्रह्माण्ड, पाप आदि के साथ बहुत जटिल अभिव्यक्ति की गणना कर सकता है।


मैंने आपके exprविकल्प को स्वीकृत उत्तर में जोड़ दिया। स्वीकार करने और केंद्रीकृत करने के लिए एक चुनना था।
माइकल डुरंट

3
आप निष्पादित करने का प्रयास कर रहे हैं expr 20+5। आप इसे काम करने के लिए संख्या और अधिक के बीच रिक्त स्थान लिखना होगा: expr 20 + 5। वह महत्वपूर्ण है।
भीड़

24

उल्लिखित समाधान बहुत ही सरल गणना के लिए ठीक हैं, लेकिन बहुत त्रुटि-प्रवण हैं। उदाहरण:

# without spaces expr 20+5 produces literally 20+5
expr 20+5
 20+5

# bc's result doesn't give the fractional part by default
bc <<< 9.0/2.0
 4

# expr does only integer
expr 9 / 2
 4

# same for POSIX arithmetic expansion
echo $((9/2))
 4

# bash arithmetic expansion chokes on floats
echo $((9.0/2.0))
 bash: 9/2.0: syntax error: invalid arithmetic operator (error token is ".0")

# Most `expr` implementations also have problems with floats
expr 9.0 / 2.0
 expr: non-integer argument

पिछले वाले की तरह एक सिंटैक्स त्रुटि आसानी से देखी जाती है, लेकिन एक खारिज फ्लोट भाग के साथ पूर्णांक प्रतिक्रियाएं आसानी से किसी का ध्यान नहीं जा सकती हैं और गलत परिणाम दे सकती हैं।

इसलिए मैं हमेशा इसके लिए लू जैसी स्क्रिप्टिंग भाषा का उपयोग करता हूं। लेकिन आप कोई भी स्क्रिप्टिंग भाषा चुन सकते हैं, जिससे आप परिचित हों। मैं सिर्फ एक उदाहरण के रूप में लुआ का उपयोग करता हूं। फायदे हैं

  • एक परिचित वाक्यविन्यास
  • परिचित कार्य
  • परिचित कैवियट
  • लचीला इनपुट
  • रिक्त स्थान आमतौर पर मायने नहीं रखते
  • फ्लोटिंग पॉइंट आउटपुट

उदाहरण:

lua -e "print(9/2)"
 4.5

lua -e "print(9 / 2)"
 4.5

lua -e "print(9.0/2)"
 4.5

lua -e "print (9 /2.)"
 4.5

lua -e "print(math.sqrt(9))"
 3

2
bcपरिणाम पूर्णांक नहीं है, बस के लिए गोल है scale, जो डिफ़ॉल्ट मान है 0. इसलिए bc <<< 'scale=4;9.0/2.0'यदि आप आंशिक भाग चाहते हैं।
मैनटवर्क

सुधारों के लिए धन्यवाद। लेकिन फिर भी, यह त्रुटि प्रवण है। scaleयदि मैं bcकुछ हफ़्ते में उपयोग करने के लिए जोड़ दूंगा तो क्या मैं पुनर्विचार करूंगा ? शायद ऩही। और यहां तक ​​कि अगर इसे स्थायी रूप से बदलने का कोई तरीका है, तो यह आपको काट देगा यदि आप डिफ़ॉल्ट सेटिंग्स वाले सिस्टम पर हैं।
मार्को

3
व्यक्तिगत रूप से मुझे याद है कि scaleमैं bcपहली बार सालों पहले मिला था। लेकिन मैं हमेशा यह भूल गया कि आउटपुट फ़ंक्शन luaहै putया नहीं puts। ;)
मैनटवर्क

बस स्क्रिप्टिंग भाषाओं में से एक के रूप में बीसी की गिनती करें। मुझे हमेशा पता है कि मुझे पूर्णांक परिणामों की आवश्यकता है या नहीं - यदि पूर्णांक ठीक है तो मैं बैश में रहूंगा, अन्यथा मेरे पास शायद ही सीसी का उपयोग करने का कोई कारण हो। लुआ के लिए, आपको याद रखना होगा -e, प्रिंट और कोष्ठक।
उपयोगकर्ता अज्ञात

7
हमेशा bc -lसादे की बजाय हमेशा उपयोग करें bc, फिर कभी चिंता न करें scale
दलेर

23

किसी ने अभी तक जाग का उल्लेख नहीं किया है?

POSIX शेल फ़ंक्शंस का उपयोग करना और गणित शक्ति को जागृत करना, बस इसे (एक लाइन) फ़ंक्शन को परिभाषित करें:

calc(){ awk "BEGIN { print $*}"; }

तो बस चीजों को निष्पादित करें calc 1+1याcalc 5/2

नोट: फ़ंक्शन को हमेशा उपलब्ध बनाने के लिए, इसे ~ / .bashrc (या आपके संबंधित शेल की स्टार्टअप फ़ाइल) में जोड़ें

बेशक, निम्नलिखित सामग्रियों के साथ "कैल्क" नाम की एक छोटी स्क्रिप्ट:

#!/bin/sh -
awk "BEGIN { print $* }"

काम भी कर सकता था।


2
वाह यह सबसे अच्छा है, यहां तक ​​कि फ्लोट का भी समर्थन करता है। यह कुछ भी स्थापित किए बिना काम करता है!
CMCDragonkai

1
बहुत अच्छा, मैं एक फ्लोटिंग तुलना करना चाहता था, यहां बताया गया है कि मैंने आपकी मदद से यह कैसे किया:a=0; b=0.0; if echo "$a" "$b" | awk '{ exit ($1 == $2) ? 0 : 1 }'; then echo 'equals'; else echo 'not equals'; fi
पॉल टोबियास

18

आप उपयोग कर सकते हैं bc। उदाहरण के लिए,

$ echo "25 + 5" | bc
30

वैकल्पिक रूप bc <<< 25+5से भी काम करेंगे।

या अंतःक्रियात्मक रूप से, यदि आप केवल एक सरल गणना से अधिक करना चाहते हैं:

$ 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'. 
25 + 5
30

GNU का कार्यान्वयन bcउस हेडर / कॉपीराइट जानकारी को स्टार्ट-अप पर करता है जब उसके स्टड और स्टडआउट दोनों एक टर्मिनल पर जाते हैं। आप इसे (GNU- विशिष्ट) -qविकल्प के साथ दबा सकते हैं । अधिक जानकारी के लिए bc man पेज देखें


1
+1 दोनों पाइप ("|") और bs के लिए इंटरैक्टिव मोड विकल्पों के लिए। ctrl-dबाहर निकलने के लिए कोई करता है ?
माइकल डुरंट

1
@MichaelDurrant हां, ^ D जैसा करेगा चाल करेंगेquit
Levon

c () { bc -l <<< "$@" } c त्वरित और आसान उपयोग के लिए एक समारोह को परिभाषित करेगा । जैसे c 3/2आपको देंगे 1.50000000000000000000। ऊपर दिए गए लिंक में बताया गया है कि ऐसा कैसे किया जाता है।
59 बजे

1
@Lonon मैन पेज लिंक अभी भी काम करता है। हालाँकि, लिंक: paweng.com/2008/08/15/unix-command-line-calculator , जिसे आप वाक्य में "This" के लक्ष्य के रूप में प्रदान करते हैं "यह पृष्ठ यह भी दिखाता है कि एक उपनाम कैसे सेट करें ..." प्रकट होता है मृत।
22

1
@ijoseph थैंक्स .. मैंने उस 6 साल पुराने लिंक के संदर्भ को हटा दिया (काश लिंक मेरे ब्राउज़र पर अधिक स्पष्ट रूप से खड़े होते - कल देखने पर भी यह नहीं देखा)
लेवोन

16

आप उपयोग कर सकते हैं calc:

यदि आप calcकिसी अन्य तर्क के साथ प्रवेश करते हैं तो यह एक इंटरैक्टिव मोड में प्रवेश करता है जहां आप बस गणित कर सकते हैं। आप इससे बाहर निकल कर बाहर निकलें:

C-style arbitrary precision calculator (version 2.12.3.3)
Calc is open software. For license details type:  help copyright
[Type "exit" to exit, or "help" for help.]

; 2+4
6
; 3+5
8
; 3.4+5
8.4
; 2^4
16
; exit

या आप इसे एक तर्क के रूप में अभिव्यक्ति के साथ उपयोग करते हैं और यह उत्तर प्रदान करेगा और फिर बाहर निकल जाएगा

$calc 2 + 4
    6
$

calcके समान है bc, मैं इसे डिफ़ॉल्ट रूप में बेहतर तरीके से व्यवहार करना पसंद करता हूं


1
आपको इंटरेक्टिव मोड में प्रवेश करने की आवश्यकता नहीं है, जब तक आप विशेष रूप से नहीं चाहते हैं, जैसे: calc -e '2+4; 3+5; 3.4+5; 2^44 आउटपुट लाइनें प्रिंट करता है, या बस calc -e 33+(3^3).. +1 मुझे कैलकुलेटर के लिए 'कैल्क' नामक कुछ का उपयोग करने का विचार पसंद है :)
पीटर.ओ.

1
मैंने सिर्फ महसूस किया है कि -eविकल्प की जरूरत नहीं है जब केवल एक ही अभिव्यक्ति है ... साफ! ..
पीटर।

10

मुझे पायथन को फायर करना और इसे एक इंटरैक्टिव कैलकुलेटर के रूप में उपयोग करना पसंद है (लेकिन फिर, मैं पायथन प्रोग्रामर हूं)।


मैं भी! अजगर मेरी स्विस सेना चाकू है
लेवोन

मेरे पास हमेशा screenसिर्फ पायथन चलाने में एक खिड़की है ।
अरसज १५'१२ को

1
pythonpy ( github.com/russell91/pythonpy ) यह करने के लिए एक अच्छा तरीका है और अजगर के सिंटैक्स में अन्य चीजों के बिना एक इंटरैक्टिव खोल को आग लगाने के लिए: py '3.2 * 5' => 16
RussellStewart

मुझे अजगर पसंद है, लेकिन यह समय शुरू हो जाता है यदि आप बस अपनी बैश स्क्रिप्ट के कुछ स्थानों में दो नंबर जोड़ना चाहते हैं
ndemou

@ndemou मैंने "इंटरैक्टिव" कैलकुलेटर कहा। यद्यपि यह भी ध्यान देने योग्य है कि किसी बिंदु पर यदि आप एक स्क्रिप्ट में पर्याप्त जटिल चीजें कर रहे हैं, तो पवित्रता आपको बैश (पायथन जैसे) के अलावा कुछ और का उपयोग करने का आदेश देती है।
asmeurer

10

चूंकि किसी और ने इसका उल्लेख नहीं किया है, और हालांकि यह कड़ाई से कैलकुलेटर नहीं है (लेकिन न तो ये सभी सामान्य प्रयोजन वाली स्क्रिप्टिंग भाषाएं हैं), मैं उल्लेख करना चाहूंगा units:

$ units "1 + 1"
        Definition: 2
$ units "1 lb" "kg"
        * 0.45359237
         / 2.2046226

या, कम आउटपुट के लिए ताकि आप किसी $()चीज़ को असाइन करने के लिए सिर्फ नंबर का उपयोग कर सकें :

$ units -t "1 + 1"
2
$ units -t "1 lb" "kg"
0.4539237

और यह तापमान रूपांतरण भी करता है

$ units -t "tempC(20)" "tempF"
68

आगे की गणना के लिए एक अभिव्यक्ति में तापमान रूपांतरण प्राप्त करने के लिए, यह करें:

$ units -t "~tempF(tempC(20))+1"
68.1

बहुत सारे विकल्प हैं जो एक अतिरिक्त कार्यक्रम स्थापित करने की आवश्यकता नहीं है कि मैं यह नहीं देखता कि कोई इस तरह क्यों जाना चाहता है।
ndemou

@ndemou यह कुछ वितरणों पर डिफ़ॉल्ट रूप से स्थापित है ... और इनमें से बहुत सारे उत्तर नहीं हैं। और क्या आपको वास्तव में टिप्पणी करने की आवश्यकता है कि एक उत्तर पर जो पांच साल पुराना है?
रैंडम 832

1
मुझे लगता है कि जब मैं डाउन-वोट करता हूं तो यह टिप्पणी करना अच्छा होता है और यह एक अभ्यास है जो एसई द्वारा प्रोत्साहित किया जाता है मैं नहीं देखता कि पांच साल प्रासंगिक क्यों हैं। समान टिप्पणी सभी समान उत्तरों पर लागू होती है - व्यक्तिगत कुछ भी नहीं। (BTW यहां तक ​​कि सबसे अस्पष्ट कार्यक्रम कुछ वितरण पर डिफ़ॉल्ट रूप से स्थापित किया जा सकता है । इस मामले में मैंने डेबियन, उबंटू, सेंटोस और
रेडहैट की

6
$> ghc -e '20 + 5'
25
it :: Integer

इसके अलावा ghci, यह इंटरैक्टिव मोड में ग्लासगो-हास्केल कंपाइलर है ( ghc --interactiveएक अभिव्यक्ति के साथ इसका मूल्यांकन करने के विपरीत -e), एक आकर्षक "कैलकुलेटर" के लिए बनाता है:

$>ghci
GHCi, version 7.8.3: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> pi
3.141592653589793
Prelude> ceiling pi
4
Prelude> compare 1 2
LT

3
क्या इसका ghcअर्थ ग्लासगो हास्केल कम्पाइलर है?
मैनटवर्क

कार्यक्रमों पर एक पास लेने के लिए मुझे स्थापित करने की आवश्यकता है लेकिन thx।
माइकल डुरंट

4

मैं "जावास्क्रिप्ट की शक्ति" पढ़ने के लिए विश्वास नहीं कर सकता (लेकिन मुझे निश्चित रूप से पर्ल के अलावा, अन्य भागों के लिए उत्तर को उखाड़ना पड़ा था।

व्यावहारिक रूप से, सरल मामलों के लिए जहां पूर्णांक अंकगणित पर्याप्त है, मैं buildin $ (...) का उपयोग करता हूं और इसकी सिफारिश करता हूं। एल्स, लगभग सभी मामलों में गूंज "..." | बीसी पर्याप्त है।

कुछ अंकगणितीय परिचालनों के लिए जैसे आँकड़े, मैट्रिक्स संचालन और अधिक Rबेहतर उपकरण है:

echo 25 + 5 | R --vanilla

और छोटे डेटासेट और ग्राफ़िकल थ्रो परिणाम के लिए, oocalcएक अच्छी उपयोगिता है।


4

मैं थोड़ा अजगर स्क्रिप्ट का उपयोग करता हूं जो एक अजगर अभिव्यक्ति का मूल्यांकन करेगा और परिणाम प्रिंट करेगा, फिर मैं कुछ ऐसा चला सकता हूं

$ pc '[i ** 2 for i in range(10)]'
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

स्क्रिप्ट है:

#!/usr/local/bin/python3

import sys
import traceback
from codeop import CommandCompiler

compile = CommandCompiler()
filename = "<input>"
source = ' '.join(sys.argv[1:]) + '\n'

try:
    code = compile(source, filename) 
except (OverflowError, SyntaxError, ValueError):
    type, value, sys.last_traceback = sys.exc_info()
    sys.last_type = type
    sys.last_value = value
    if filename and type is SyntaxError:
        # Work hard to stuff the correct filename in the exception
        try:
            msg, (dummy_filename, lineno, offset, line) = value.args
        except ValueError:
            # Not the format we expect; leave it alone
            pass
        else:
            # Stuff in the right filename
            value = SyntaxError(msg, (filename, lineno, offset, line))
            sys.last_value = value
    lines = traceback.format_exception_only(type, value)
    print(''.join(lines))
else:
    if code:
        exec(code)
    else:
        print('incomplete')

दुर्भाग्य से मुझे याद नहीं है कि मैंने कहां से अधिकांश कोड उधार लिया था, इसलिए मैं इसका हवाला नहीं दे सकता।


print(eval(' '.join(sys.argv[1:])))एक ही बात नहीं करेंगे ?
g.rocket

आप यहाँ एक मक्खी मारने के लिए हथौड़े का उपयोग कर रहे हैं
ndemou

4

gnuplot

gnuplot - एक इंटरेक्टिव प्लॉटिंग प्रोग्राम
उपरोक्त लिंक का अनुसरण करें या टाइपgnuplotकरें प्रांप्ट तब gnuplot दुभाषिया केhelpअंदर। Gnuplot डेटा को प्लॉट करने के लिए पैदा हुआ एक प्रोग्राम है, लेकिन इसका उपयोग गणना के लिए भी किया जा सकता है। यह लाभ प्रदान करता है कि आप कार्यों को परिभाषित कर सकते हैं या अंतर्निहित लोगों का उपयोग कर सकते हैं।

echo  "pr 20+5/2"  |  gnuplot          #  Lazy-note `pr` instead of print
22                                     #  Integer calculation & result
echo  "pr 20.+5/2"  |  gnuplot         #  Lazy-note `pr` instead of print
22.0                                   #  Floating point result
echo  "pr sin(2*pi/3.)"  |  gnuplot    #  Some functions ...
0.866025403784439

रूट (या कुछ अन्य सी दुभाषिया )

जड़ प्रणाली सब एक बहुत ही कुशल तरीके से संभालने के लिए और डेटा की बड़ी मात्रा का विश्लेषण करने के लिए आवश्यक कार्यक्षमता के साथ OO चौखटे का एक सेट प्रदान करता है ...

आप इसे C दुभाषिया , CINT के रूप में उपयोग कर सकते हैं , या आप कई अन्य C दुभाषियों में से एक का उपयोग कर सकते हैं । IMHO, यह विशाल, जटिल, शक्तिशाली है, और हमेशा अनुकूल नहीं है, लेकिन बड़ी संतुष्टि भी दे सकता है।

यदि आप वास्तव में अपने अंदर की छोटी आवाज़ को नहीं सुनना चाहते हैं जो कन्फ्यूशियो का हवाला देता है और आप पहिया पर एक (मक्खन) मक्खी को तोड़ने के लिए तैयार हैं जिसे आप रूट का उपयोग कर सकते हैं । इस मामले -lमें छप स्क्रीन दिखाने से बचने के लिए अनिवार्य है ...

echo  "20+5/2"   | root -l
(const int)22
echo  "20+5/2."  | root -l
(const double)2.25000000000000000e+01

echo  "cout<< 20+5/2 << endl;"   | root -l
22

4

पूर्णांक अंकगणित के लिए (जहां 3/2 = 1)

  • bash echo $(( 1+1 ))
  • fish math 1+1
  • zsh* echo $((1+1))

*: और ksh93, यश

फ्लोटिंग पॉइंट अंकगणित के लिए (जहाँ 3/2 = 1.5)

  • bash awk "BEGIN {print 10/3}" (कम परिशुद्धता)
  • bash echo "10/3"|bc -l (उच्च परिशुद्धता)
  • fish math -s4 10/3
  • zsh* echo $((10./3))

*: और ksh93, यश

आप न्यूनतम टाइपिंग के साथ awk का उपयोग करने के लिए निश्चित रूप से अपने शेल को कॉन्फ़िगर कर सकते हैं जैसे calc 10/3(नोट 1 और मछली 2 के लिए यह कैसे करना है पर नोट्स देखें )।

बैश के लिए अजीब सुझाव देने का मुख्य कारण यह है कि यह लगभग सभी यूनिक्स जैसे ओएस पर प्रीइंस्टॉल्ड है और यथोचित रूप से हल्का है (निश्चित रूप से प्रक्रिया शुरू करने की लागत है) कम सटीक लेकिन अधिक मानव-अनुकूल आउटपुट के साथ bc -lजिसमें प्रिंसेस 20 दशमलव है अंक (हालांकि आप निश्चित रूप से अधिक दशमलव अंकों को प्राप्त करने के लिए जाग सकते हैं )।


टिप्पणियाँ

(1) बैश में सरलीकृत सिंटैक्स का उपयोग कैसे करें

इस बैश फंक्शन को अपने साथ जोड़ें ~/.bashrc:

calc(){ awk "BEGIN { print $*}"; }

(२) मछली में सरलीकृत वाक्यविन्यास का उपयोग कैसे करें

एक calcमछली समारोह बनाएँ (यानी एक पाठ फ़ाइल नाम /home/ndemou/.config/fish/functions/calc.fish):

function calc
    awk "BEGIN{ print $argv }" ;
end

awkआपके सिस्टम के doubleफ़्लोटिंग पॉइंट प्रकार का उपयोग करेगा , इसलिए अधिकांश अन्य उपकरणों की तरह सटीक होगा जो मनमाना परिशुद्धता नहीं करते हैं (ध्यान दें कि gawk मनमाना परिशुद्धता कर सकते हैं)। आउटपुट के लिए उनके स्ट्रिंग प्रतिनिधित्व के लिए संख्या awkमें OFMTपरिवर्तन करने के लिए चर का उपयोग करता है ( %.6gडिफ़ॉल्ट रूप से, आप चाहते हैं कि %.17gआप उच्च परिशुद्धता चाहते हैं )।
स्टीफन चेज़लस

ध्यान दें कि fish's mathसिर्फ एक समारोह है कि कहता है bc(हालांकि कि कैसे बदल सकते हैं )
स्टीफन Chazelas

1
खैर, यह एक फ़ंक्शन था जो कॉल करता है bc। यह अब नए संस्करणों में नहीं है, जहां चीजें math "scale=4; 10/3"अब ( math -s4 10/3अब के बजाय) काम नहीं
करेंगी

धन्यवाद स्टीफन चेज़लस - मैंने अपना उत्तर अपडेट कर दिया है ( math -s4पुराने संस्करणों में भी इसका समर्थन प्रतीत होता है)
ndemou

3

कंसोल गणना के लिए, मैं उपयोग करता हूं concalc। ( sudo aptitude install concalc)

उसके बाद, बस टाइप करें concalc और एंटर करें। यह एक प्रॉम्प्ट की आपूर्ति नहीं करेगा, लेकिन आपकी गणना (कोई रिक्त स्थान) और हिट दर्ज में बस टाइप करें, और अगली पंक्ति में, यह आपको संख्यात्मक मान देगा।


3

SQLite :

echo 'select 1 + 1;' | sqlite3 

MySQL :

mysql -e 'select 1 + 1 from dual;'

PostgreSQL :

psql -c 'select 1 + 1 as sum;'

3
कुछ मामूली विवरणों का उल्लेख from dualकरना आवश्यक है : 1) ओरेकल की आवश्यकता है, MySQL selectबिना fromखंड के सक्षम है । 2) PostgreSQL को उपनाम की आवश्यकता नहीं है। 3) ;केवल SQLite द्वारा आवश्यक है। 4) MySQL और PostgreSQL केवल तभी काम करेंगे जब वे डेटाबेस सर्वर से कनेक्ट करने में सक्षम हों। 5) MySQL और PostgreSQL परिणामों के आसपास ASCII- कला तालिका तैयार करेगा। केवल मान प्राप्त करने के लिए: mysql -BNe 'select 1+1'और psql -tAc 'select 1+1
15

2

आपूर्ति किए गए कार्यक्रम के माध्यम से GNU मल्टीपल प्रिसिजन अरिथमेटिक लाइब्रेरी का उपयोग करें run-expr:

  • डाउनलोड करें और निकालें (आपको lzip की आवश्यकता होगी): tar -xvf gmp-5.1.3.tar.lz
  • शीर्ष निर्देशिका में, ./configureऔर make(इंस्टॉल करने की कोई आवश्यकता नहीं)
  • डेमो / एक्सप में, make run-expr
  • मुझे अपनी ~/binनिर्देशिका में एक प्रतीकात्मक लिंक बनाना पसंद है :ln -s /path/to/gmp/demos/expr/run-expr ~/bin/run-expr
  • आसान उपयोग के लिए एक उपनाम जोड़ें; उदाहरण के alias calcf='run-expr -f'लिए फ्लोटिंग पॉइंट मूल्यांकन

आउटपुट:

# calcf '2/3'
"2/3" base 0: result 0.666666666666666666667e0

से run-expr.cफ़ाइल:

Usage: ./run-expr [-z] [-q] [-f] [-p prec] [-b base] expression...

   Evaluate each argument as a simple expression.  By default this is in mpz
   integers, but -q selects mpq or -f selects mpf.  For mpf the float
   precision can be set with -p.  In all cases the input base can be set
   with -b, or the default is "0" meaning decimal with "0x" allowed.

देखें मैनुअल समारोह कक्षाएं मतभेद और जानकारी के लिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.