2010-05-18 17 views
22

संभावित डुप्लिकेट:
Is there a string math evaluator in .NET?
Converting string expression to Integer Value using C#
Best and shortest way to evaluate mathematical expressions
c# evaluating string “3*(4+2)” yield int 18सी # गणित कैलकुलेटर

वहाँ की तरह (2-3/4 * 12 गणित अभिव्यक्ति की गणना करने के लिए एक रास्ता है) यहां प्रस्तुत करने से अलग तरीके से?

var result = new DataTable().Compute("2-3/4*12", null); 

ध्यान दें कि यह सरल गणित अभिव्यक्ति तक सीमित है:

http://www.c-sharpcorner.com/uploadfile/mgold/codedomcalculator08082005003253am/codedomcalculator.aspx

+0

http://stackoverflow.com/questions/333737/, http://stackoverflow.com/questions/234217/, http://stackoverflow.com/questions/1437964/, http://stackoverflow.com/ प्रश्न/355062/ –

उत्तर

60

DataTable एक Compute विधि है कि आप इस लिखने के लिए अनुमति देता है।

अन्य विकल्प डीएलआर में एक गतिशील भाषा का उपयोग करने में शामिल है जैसे आयरनपीथन और आयरनरुबी। चेक-आउट this post:

var engine = new IronPython.Hosting.PythonEngine(); 
double result = pythonEngine.EvaluateAs<double>("2-3/4*12"); 

तुम भी NCalc library on GitHub जाँच कर सकते हैं।

+1

दिलचस्प। कभी नहीं पता था कि ऐसी चीज मौजूद थी! –

+0

'गणना' कैसे काम करता है? चलाने के लिए SQL सर्वर का उपयोग कर? –

+1

स्ट्रिंग एक्सप्रेशन की गणना करने के लिए डेटाटेबल का उपयोग करना बहुत ही कमजोर है, लेकिन आपने इसका उपयोग करने के लिए एक बहुत ही संक्षिप्त संक्षिप्त तरीका दिखाया है। कुडोस। – froggythefrog

0

उह है कि एक बहुत ऊपर समाधान से अधिक की तरह लगता है।

क्या आप वास्तव में चाहते हैं एक सरल पार्सर है।

आप टोकन में स्ट्रिंग को तोड़ने के लिए और फिर उन्हें मूल्यांकन की जरूरत है। यह आपको शोध शुरू कर देगा। http://en.wikipedia.org/wiki/Parsing#Overview_of_process

0

अभिव्यक्ति वृक्ष बनाने का सबसे अच्छा विकल्प है। सबसे पहले आप अपने अभिव्यक्ति के पेड़ का निर्माण, तो http://msdn.microsoft.com/en-us/library/system.linq.expressions.aspx का उपयोग आप तो आसानी से उपयोग कर रहा http://msdn.microsoft.com/en-us/library/bb356928(v=VS.100).aspx

4

चेक बाहर पलायन (फास्ट हल्के अभिव्यक्ति मूल्यांकनकर्ता) यह संकलन कर सकते हैं - http://flee.codeplex.com/

भागो एक अभिव्यक्ति पार्सर और के लिए मूल्यांकनकर्ता है। शुद्ध रूपरेखा। यह आपको रनटाइम पर sqrt (a^2 + b^2) जैसे स्ट्रिंग एक्सप्रेशन के मान की गणना करने की अनुमति देता है। यह आईएल को सीधे अभिव्यक्ति संकलित करने के लिए एक कस्टम कंपाइलर, दृढ़ता से टाइप की गई अभिव्यक्ति भाषा, और हल्के कोडेजन का उपयोग करता है। इसका मतलब है कि अभिव्यक्ति मूल्यांकन बेहद तेज़ और कुशल है। डेमो आज़माएं, जो आपको अभिव्यक्तियों के आधार पर छवियां उत्पन्न करने देता है, और स्वयं को देखता है।

यह मुफ़्त है और तेजी से है और मैं परियोजनाओं के एक जोड़े में यह प्रयोग किया है।

+0

अच्छा लगता है। क्या आप साझा कर सकते हैं कि आपने मानक अभिव्यक्ति eval के अलावा इसे कैसे उपयोग किया है; जैसे यह आपके वास्तुकला, आदि को कैसे प्रभावित करता है –

+0

+! FLEE अविश्वसनीय रूप से भयानक और अविश्वसनीय रूप से उपयोग करने में आसान है। – MasterMastic

3

एनबी: यह उत्तर केवल पूर्णता के लिए है। यह निश्चित रूप से एक दृष्टिकोण नहीं है जिसे मैं अनुशंसा करता हूं।

सी # से सीधे (बहिष्कृत) जेस्क्रिप्ट पुस्तकालयों तक पहुंचना संभव है, जिसका अर्थ है कि आप जेस्क्रिप्ट के eval फ़ंक्शन के बराबर उपयोग कर सकते हैं।

using Microsoft.JScript;  // needs a reference to Microsoft.JScript.dll 
using Microsoft.JScript.Vsa; // needs a reference to Microsoft.Vsa.dll 

// ... 

string expr = "2 - 3/4 * 12"; 
Console.WriteLine(JScriptEval(expr)); // displays -7 

// ... 

public static VsaEngine _engine = VsaEngine.CreateEngine(); 

public static double JScriptEval(string expr) 
{ 
    // error checking etc removed for brevity 

    return double.Parse(Eval.JScriptEvaluate(expr, _engine).ToString()); 
} 
8

कुछ रोचक आप के लिए उपलब्ध विकल्पों कर रहे हैं।

  1. NCalc - एक सी # Lexer Parser built with ANTLR। यह आपके पाठ को पार्स करेगा और आपको पैरामीटर/चर के मानों को असाइन करने की अनुमति देगा। दुभाषिया सी # है, इसलिए यदि आप किसी ऐप्लिकेशन डोमेन अतिरिक्त विधानसभाओं लोड करने के लिए आदि की जरूरत नहीं है

  2. JINT - ECalc का एक ही लेखक व्याकरण बनाने के लिए ANTLR का उपयोग करके बनाया गया एक सी # आधारित जावास्क्रिप्ट दुभाषिया। यह वर्तमान में बीटा में है लेकिन गणना और कार्यों के साथ अच्छी तरह से काम करता है।

  3. CS-Script.Net - साइट से:। "CS-स्क्रिप्ट एक CLR (साझा भाषा क्रम) जो एक प्रोग्रामिंग भाषा के रूप में ECMA अनुरूप सी # का उपयोग करता है आधारित पटकथा प्रणाली है CS-स्क्रिप्ट वर्तमान में CLR का Microsoft क्रियान्वयन (.NET 2.0 लक्षित करता है /3.0/3.5) मोनो पर सीमित समर्थन के साथ। " लोड स्क्रिप्ट और मेमोरी और अलग ऐप डोमेन में असेंबली बनाएं। यह काफी मजबूत है, और मैं इसे एम्बेडेड स्क्रिप्टिंग के लिए उत्पादन में उपयोग करता हूं।

+0

मैं दूसरा एनसीएएलसी - मैंने इसे बड़े पैमाने पर इस्तेमाल किया है और इसे बहुत स्थिर पाया है। – GreyCloud

+0

एक अलग नोट पर, एनसीएएलसी लोगों के पास कोडप्लेक्स.कॉम पर जिंट नामक सी # जावास्क्रिप्ट दुभाषिया है, मैंने इसके साथ थोड़ा सा खेला है और इसके साथ जॉन रेसिग के मूल microtemplate.js निष्पादित कर सकते हैं। –

3

"अनुशंसा नहीं करते हैं" श्रेणी में निश्चित रूप से, लेकिन पूर्णता के लिए - यदि आप एक डेटाबेस आप आसानी से जुड़ सकते हैं मिल गया है, यह प्रश्न भेजें "अभिव्यक्ति का चयन करें"।