C#math计算器
可能重复:
在.NET中是否有一个stringmath评估器?
使用C#将stringexpression式转换为整数值
最好和最短的方式来评估mathexpression式
c#评估string“3 *(4 + 2)”yield int 18
有没有一种方法来计算像(2-3 / 4 * 12)这样的mathexpression式?
http://www.c-sharpcorner.com/uploadfile/mgold/codedomcalculator08082005003253am/codedomcalculator.aspx
DataTable有一个Compute方法,允许你写这个:
var result = new DataTable().Compute("2-3/4*12", null);
请注意,这仅限于简单的mathexpression式。
其他选项包括在DLR中使用dynamic语言,如IronPython和IronRuby。 检出这个职位 :
var engine = new IronPython.Hosting.PythonEngine(); double result = pythonEngine.EvaluateAs<double>("2-3/4*12");
您也可以检查CodePlex上的NCalc库 。
有一些有趣的选项可供您使用。
-
NCalc – 用ANTLR构build的C# 词法分析器 。 这将parsing您的文本,并允许您将值分配给参数/variables。 解释器是C#,所以您不必在应用程序域中加载其他程序集等。
-
JINT – 一个基于C#的Javascript解释器,由ECalc的同一个作者用ANTLR创build语法。 这是目前在testing版,但与计算和function很好地工作。
-
CS-Script.Net – 来自网站:“CS-Script是一个基于CLR(通用语言运行时间)的脚本系统,它使用符合ECMA标准的C#作为编程语言。CS-Script目前的目标是CLR(.NET 2.0 / 3.0 / 3.5),对Mono的支持有限。“ 加载脚本并在内存和独立的应用程序域中创build程序集。 这是相当强大的,我用它在embedded式脚本生产。
检查FLEE(快速轻量expression式评估) – http://flee.codeplex.com/
Flee是.NET框架的expression式parsing器和评估器。 它允许您在运行时计算stringexpression式的值,如sqrt(a ^ 2 + b ^ 2)。 它使用自定义编译器,强typesexpression式语言和轻量级代码编译器直接向IL编译expression式。 这意味着expression评估是非常快速和有效的。 试试演示,它可以让你基于expression式生成图像,并亲自查看。
它是免费和快速的,我用它在几个项目。
注:这个答案只是为了完整。 这绝对不是我推荐的方法。
可以直接从C#访问(不build议使用的)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()); }
肯定在“不推荐”类别,但为了完整性 – 如果你有一个数据库,你可以方便地连接,发送查询“SELECT expression式 ”。
呃,这似乎是一个非常重要的解决scheme。
你真正想要的是一个简单的parsing器。
您需要将string分解为令牌,然后对其进行评估。 这会让你开始研究。 http://en.wikipedia.org/wiki/Parsing#Overview_of_process
最好的select是build立expression式树。 首先构buildexpression式的树,然后使用http://msdn.microsoft.com/en-us/library/system.linq.expressions.aspx,您可以使用http://msdn.microsoft.com/ EN-US /库/ bb356928(v = VS.100)的.aspx