c#从字符串计算多个计算

时间:2016-03-09 19:03:45

标签: c# .net winforms calculator

我正在用c#(winforms)制作一个计算器,我想知道是否有一种简单的方法来计算一个包含多个计算的字符串,例如:如果你有字符串"124+241/2*5"就让程序计算它,然后得到一个int输出。

提前致谢。

5 个答案:

答案 0 :(得分:3)

好吧,你基本上都在寻找Javascript this._el.nativeElement.offsetTop 函数的C#等价物。

我推荐图书馆NCalc

eval()

另一个计算引擎是Jace.NET

var result = new Expression("124+241/2*5").Evaluate()

还有Dynamic Expresso

Dictionary<string, double> variables = new Dictionary<string, double>();
variables.Add("var1", 2.5);
variables.Add("var2", 3.4);

CalculationEngine engine = new CalculationEngine();
double result = engine.Calculate("var1*var2", variables);

您可以使用Roslyn's ScriptingEngine来评估:

var result = new Interpreter().Eval("124+241/2*5");

答案 1 :(得分:1)

嗯,&#34;简单&#34;实际上是一个相当广泛的术语......相对而言,我应该说。无论如何,有一些库已证明自己非常强大,并且非常受欢迎。

第一个是NCALChttp://ncalc.codeplex.com/):

// One of the examples.
Expression e = new Expression("2 + 3 * 5");

第二个是Jace.NEThttps://github.com/pieterderycke/Jace):

// One of the examples.
CalculationEngine engine = new CalculationEngine();
Func<Dictionary<string, double>, double> formula = engine.Build("var1+2/(3*otherVariable)");

Dictionary<string, double> variables = new Dictionary<string, double>();
variables.Add("var1", 2);
variables.Add("otherVariable", 4.2);

double result = formula(variables);

两者都很棒,但从以前的经验来看,我发现Jace.NET在更复杂的表达方面表现得更好(在这里不应该成为你的问题)。

答案 2 :(得分:0)

没有自动的方法,您必须手动解析它或使用某种类似于JavaScript eval()的功能。

不需要使用外部库的一个不错的选择是System.Data.DataTable.Compute

public double Evaluate(string expr)
{
    System.Data.DataTable table = new System.Data.DataTable();
    return Convert.ToDouble(table.Compute(expr, String.Empty));
}

答案 3 :(得分:0)

CodeDom和Reflection使您能够将C#代码动态构建为字符串,编译它,并在程序中运行它。 .NET中这个非常强大的功能允许我们创建CodeDom计算器,这是一个计算器,用于评估Windows窗体中的表达式(甚至是C#代码行)。

http://www.c-sharpcorner.com/UploadFile/mgold/CodeDomCalculator08082005003253AM/CodeDomCalculator.aspx

答案 4 :(得分:0)

如果我理解你,你需要这样的东西:Dynamic Expresso 您可以使用NuGet

将其添加到您的程序中