2010-05-18 183 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 18C#數學計算器

有沒有一種方法來計算數學表達式像(2-3/4 * 12 )以不同於此處呈現的方式?

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/ – 2010-05-18 16:27:50

回答

60

表具有Compute方法,使您可以這樣寫:

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

注意,這是僅限於簡單的數學表達式。

其他選項包括在DLR中使用動態語言,如IronPython和IronRuby。退房this post

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

您還可以檢查NCalc library on GitHub

+1

有趣。從來不知道這樣的事情存在! – 2010-05-18 16:27:12

+0

'Compute'如何運作?使用SQL Server運行? – 2014-11-11 16:51:57

+1

使用DataTable計算字符串表達式有點誇張,但您已經展示了一個簡短的使用方法。榮譽。 – froggythefrog 2014-12-23 03:57:32

4

退房FLEE(快速輕巧表達式求值)編譯 - http://flee.codeplex.com/

迴避率是一個表達式解析器和評估的。 NET框架。它允許您在運行時計算字符串表達式的值,例如sqrt(a^2 + b^2)。它使用自定義編譯器,強類型表達式語言和輕量級代碼編譯器直接向IL編譯表達式。這意味着表達評估非常快速和高效。試用演示,它可以讓你根據表達式生成圖像,並親自查看。

它是免費和快速的,我用它在幾個項目。

+0

看起來很酷。你可以分享除了標準表達式eval以外的其他方式嗎?例如它是如何影響你的架構的? – 2010-05-18 16:41:55

+0

+! FLEE是令人難以置信的真棒,非常容易使用。 – MasterMastic 2014-05-30 02:53:03

3

注:這個答案只是爲了完整。這絕對不是我推薦的方法。

可以直接從C#訪問(不推薦使用的)JScript庫,這意味着您可以使用JScript的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 - a C#Lexer Parser built with ANTLR。這將解析您的文本並允許您爲參數/變量分配值。解釋器是C#,因此您不必在應用程序域中加載額外的程序集等。

  2. JINT - 一個基於C#的Javascript解釋器,由使用ANTLR創建語法的ECalc作者構建。目前處於測試階段,但在計算和功能方面效果良好。 「CS-Script是一個基於CLR(公共語言運行時)的腳本系統,它使用ECMA兼容的C#作爲編程語言。CS-Script目前的目標是CLR(.NET 2.0 /3.0/3.5),對Mono提供有限的支持。「加載腳本並在內存和獨立的應用程序域中創建程序集。它非常強大,我將它用於嵌入式腳本的生產。

+0

我第二NCalc - 我已經廣泛使用它,發現它非常穩定。 – GreyCloud 2010-12-09 09:34:36

+0

在另一個說明中,NCalc傢伙在Codeplex.com上有一個名爲Jint的C#javascript解釋器,我已經玩了一下,可以用它執行John Resig的原始microtemplate.js。 – 2010-12-09 19:15:57

3

絕對的「不推薦」的範疇,但爲了完整性 - 如果你有,你可以方便地連接到數據庫,發送查詢「SELECT 表達」。