评估数学表达式

时间:2013-11-27 05:07:55

标签: c# expression calculator evaluation

伙计我正在评估字符串数学表达式。

首先我导入了库

using System.Linq.Expressions;

然后在我的代码中,我做了,

Expression e = new Expression("(450*5)+((3.14*7)/50)*100");
  double result = e.Evaluate();

然而我得到的错误是     无法创建抽象类或接口的实例'System.Linq.Expressions.Expression'

为什么以上不起作用?

我如何评价这个?

4 个答案:

答案 0 :(得分:3)

为了在c#中评估这样的表达式,你必须使用Roslyn。这是一个例子(我从这里更改了一段代码http://blogs.msdn.com/b/csharpfaq/archive/2011/12/02/introduction-to-the-roslyn-scripting-api.aspx):

using Roslyn.Scripting.CSharp;

namespace RoslynScriptingDemo {
    class Program {
        static void Main(string[] args)        {
            var engine = new ScriptEngine();
            engine.Execute(@"System.Console.WriteLine((450*5)+((3.14*7)/50)*100);");
        }
    }
}

表达式只允许您从代码创建语法树:

Expression<Func<int,int,int>> add = (x, y) => x + y;
var res = add.Compilie()(2,3);

因此,您不能将字符串用作表达式的源,您必须将其写为有效的c#代码。

答案 1 :(得分:2)

尝试使用 NCalc

Expression e = new Expression("(450*5)+((3.14*7)/50)*100");
double result = e.Evaluate();

http://ncalc.codeplex.com/

答案 2 :(得分:2)

我去了Ncalc。 我正在为将来会遇到像我这样的问题的用户发布我的代码。

1.下载Ncalc(二进制)http://ncalc.codeplex.com/releases/view/73656

  1. 在解决方案中引用dll。(右键单击&gt;添加引用&gt;浏览&gt; NCalc.dll)
  2. 代码

    使用NCalc;

  3. 3.可以用作

    public Double Calculate(string argExpression)
            {
                //get the user passed string
                string ExpressionToEvaluate = argExpression;
                //pass string in the evaluation object declaration.
                Expression z = new Expression(ExpressionToEvaluate);
                //command to evaluate the value of the **************string expression
                var result = z.Evaluate();
                Double results = Convert.ToDouble(result.ToString());
    
                return results;
    
            }
    

答案 3 :(得分:1)

您可以使用Mathos Parser。它是一个简单的.NET数学表达式解析器。