c# 从字符串中计算多个计算[重复]

问题描述 投票:0回答:5

我正在用 c# (winforms) 制作一个计算器,我想知道是否有一种简单的方法来计算包含多个计算的字符串,例如:如果您有字符串

"124+241/2*5"
让程序计算它,然后得到一个 int 输出。

提前致谢。

c# .net winforms calculator
5个回答
4
投票

嗯,您基本上是在寻找 Javascript 的

eval()
函数的 C# 等效项。

我推荐图书馆NCalc

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

另一个计算引擎是Jace.NET

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);

截至 2024 年,您还可以查看 Adletec.Sonic(sonic),它最初是 Jace.NET 的一个分支,现已不再维护。它可以动态编译表达式以进行本机执行以获得高性能。

var expression = "var1*var2";

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

var engine = Evaluator.CreateWithDefaults();
double result = engine.Evaluate(expression, variables); // 8.5

还有动态 Expresso

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

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

Roslyn.Scripting.Session session = roslynEngine.CreateSession();
session.Execute("124+241/2*5");

1
投票

嗯,“简单”实际上是一个相当广泛的术语......我应该说是相对的。不管怎样,有一些库已经证明自己非常强大,并且在诸如此类的事情上非常受欢迎。

第一个是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 在更复杂的表达式上表现更好一些(这里对您来说应该不是问题)。


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));
}

0
投票

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

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


0
投票

如果我理解正确,你需要这样的东西:Dynamic Expresso 您可以使用 NuGet 将其添加到您的程序中

© www.soinside.com 2019 - 2024. All rights reserved.