我正在用c#(winforms)制作一个计算器,我想知道是否有一种简单的方法来计算一个包含多个计算的字符串,例如:如果你有字符串"124+241/2*5"
就让程序计算它,然后得到一个int输出。
提前致谢。
答案 0 :(得分:3)
好吧,你基本上都在寻找Javascript this._el.nativeElement.offsetTop
函数的C#等价物。
我推荐图书馆NCalc。
eval()
另一个计算引擎是Jace.NET。
var result = new Expression("124+241/2*5").Evaluate()
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;实际上是一个相当广泛的术语......相对而言,我应该说。无论如何,有一些库已证明自己非常强大,并且非常受欢迎。
第一个是NCALC(http://ncalc.codeplex.com/):
// One of the examples.
Expression e = new Expression("2 + 3 * 5");
第二个是Jace.NET(https://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#代码行)。
答案 4 :(得分:0)
如果我理解你,你需要这样的东西:Dynamic Expresso 您可以使用NuGet
将其添加到您的程序中