.NET框架是否有一个函数可以计算字符串中包含的数字表达式并返回结果?铁:
string mystring = "3*(2+4)";
int result = EvaluateExpression(mystring);
Console.Writeln(result); // Outputs 18
Run Code Online (Sandbox Code Playgroud)
是否有标准框架功能,您可以用我的EvaluateExpression方法替换?
注意:数学表达式评估不是这个问题的焦点.我想在.NET中运行时编译和执行新代码. 话虽如此...
我想允许用户在文本框中输入任何等式,如下所示:
x = x / 2 * 0.07914
x = x^2 / 5
Run Code Online (Sandbox Code Playgroud)
并将该等式应用于传入的数据点.输入数据点由x表示,每个数据点由用户指定的等式处理.我多年前做过,但我不喜欢这个解决方案,因为它需要为每次计算解析等式的文本:
float ApplyEquation (string equation, float dataPoint)
{
// parse the equation string and figure out how to do the math
// lots of messy code here...
}
Run Code Online (Sandbox Code Playgroud)
当您处理大量数据点时,这会引入相当多的开销.我希望能够在飞行中将方程转换为函数,这样它只需要解析一次.它看起来像这样:
FunctionPointer foo = ConvertEquationToCode(equation);
....
x = foo(x); // I could then apply the equation to my incoming data like this
Run Code Online (Sandbox Code Playgroud)
函数ConvertEquationToCode将解析方程并返回指向应用适当数学的函数的指针.
该应用程序基本上是在运行时编写新代码.这可能与.NET有关吗?
我需要找到一个快速,轻量级的表达式解析器.
理想情况下,我想传递一个名称/值对列表(例如变量)和一个包含要评估的表达式的字符串.我需要的只是一个真/假值.
表达式的类型应该是:
varA == "xyz" and varB==123
Run Code Online (Sandbox Code Playgroud)
基本上,只是一个简单的逻辑引擎,其表达式在运行时提供.
更新
至少需要支持==,!=,>,> =,<,<=
关于速度,我希望每个请求大约执行5个表达式.我们会看到附近的某个地方/请求一秒钟.我们当前的页面往往在50ms以内执行.通常,任何表达式中只涉及2或3个变量.但是,我需要在执行之前将大约30加载到解析器中.
更新2012/11/5
有关性能的更新.我们近2年前实施了nCalc.从那以后,我们扩大了它的使用范围,使得我们在帖子背面平均覆盖300多个变量的40多个表达式.现在每秒发生数千次回发,性能严重下降.
我们还扩展了它,包括一些额外的功能,同样没有性能损失.简而言之,nCalc满足了我们的所有需求并超出了我们的预期.
可能重复:
.NET中是否有字符串数学计算器?
使用C#将字符串表达式转换为整数值
最佳和最短的方法来评估数学表达式c#evaluate
string"3*(4 + 2)"yield int 18
有没有办法以不同的方式计算像(2-3/4*12)这样的数学表达式?
我有一个只包含一行的文本文件,该行只包含一个数学表达式,例如12+(3.0*(4)-1)/ sqrt(121)
我的程序需要将此express表示为字符串,然后给出结果
13
是否有任何简单的方法或第三方dll/lib来实现这一目标?
评论增加:
这里是解决方案,但许多解决方案只包含+ - /*,我需要尽可能多的运营商,如天花板方形平方根和功率()
所以这个链接可能是最好的解决方案
http://www.codeproject.com/KB/recipes/sota_expression_evaluator.aspx
我试图找出一种动态构建条件的方法.
在例子中
var greaterThan = ">";
var a = 1;
var b = 2;
if(a Convert.ToOperator(greaterThan) b) {...}
Run Code Online (Sandbox Code Playgroud)
我确实读过这篇文章,但不太明白如何实现一些东西. C#转换字符串以在逻辑条件下使用
Ano建议非常感谢
谢谢
我有一个字符串变量
string exp = "12+34+4*56+(23*45+12)2/30"
Run Code Online (Sandbox Code Playgroud)
这样做的最佳方式是什么?没有使用第三方DLL?
我有一个应用程序,需要评估Excel逻辑公式,我使用Excel DLL来执行此操作,但DLL不是非常有效.
.NET Framework(C#)有任何可以创建此作业的类吗?
一个样本
我提供这个
=IF(AND(10>=-5;10<0);(-3,8*10+335);IF(AND(10>=0;10<5);(1,4*10+335);IF(AND(10>=5;10<14,4);(-1,2766*10+348,38);IF(AND(10>=14,4;10<25);(-1,5094*10+351,74);IF(AND(10>=25;10<=45);(-1,4*10+349);0)))))
Run Code Online (Sandbox Code Playgroud)
得到这个
335,614
Run Code Online (Sandbox Code Playgroud)
谢谢
是否可以从字符串中创建c#中的匿名方法?
例如,如果我有一个字符串"x + y * z",才有可能把它变成某种方法/λ对象,我可以任意拨打x,y,z参数?
c# ×9
.net ×2
math ×2
asp.net-4.0 ×1
c ×1
c++ ×1
c++11 ×1
calculator ×1
compilation ×1
conditional ×1
evaluate ×1
excel ×1
numeric ×1
operators ×1
runtime ×1
string ×1