如果我有一个带有有效数学表达式的字符串,例如:
String s = "1 + 2 * 7";
Run Code Online (Sandbox Code Playgroud)
在.NET中是否有内置的库/函数来解析和评估该表达式并返回结果?在这种情况下15.
我正在寻找一种简单的方法来从字符串中评估一个简单的数学表达式,如下所示:
3*2 + 4*1 +(4 + 9)*6
我只想要+和*操作加号(和)标志.并且*优先于+.
注意:数学表达式评估不是这个问题的焦点.我想在.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有关吗?
可能重复:
.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
我们有一个应用程序在页面上有很多数学检查,并根据它,给用户一个交通灯(红色,绿色,黄色).
格林=他可能继续
红色=不要让他继续
黄色=允许继续但警告
这些公式适用于页面上的各种文本字段.因此,例如,如果textbox1有"10"而texbox2有"30"......公式可能是:
T1*T2> 600?"绿色":"红色 "
我的问题是:
是否有可能以某种方式集中这些公式?
我为什么需要它?
现在,如果公式有任何变化,我们也必须在服务器端复制更改(违反DRY,难以维护的代码)
一个选项可能是
- 将(简单)公式存储为带有占位符的文本(?)
- 用javascript中的值替换占位符以及服务器端代码
- 在JS中使用eval()进行计算
- 使用概述这里是C#
在这种方法中,问题可能是JS和C#中相同数学字符串的不同解释.
我有意义还是应该报告这个问题?!! :P
有没有一种简单的方法来评估字符串
"(4+8)*2"
,以便你得到24的int值?
或者还有很多工作要做到这一点......?
我想将字符串表达式转换为真正的布尔表达式.
下面的表达式将是一个输入(字符串):
"(!A && B && C) || (A && !B && C) || (A && B && !C) || (A && B && C)"
Run Code Online (Sandbox Code Playgroud)
变量A,B和C将具有您的布尔值(true或false).
我如何转换字符串表达式,替换逻辑值并使用C#进行验证?
我正在使用C#中的应用程序,我想在其中计算以字符串形式给出的算术表达式.就像我有一个字符串:
string myExpr="4*(80+(5/2))+2";
Run Code Online (Sandbox Code Playgroud)
我想计算算术表达式的结果.在使用Javascript,PHP等语言时,你可以使用Eval来做这个技巧,这似乎不是C#中的一个选项.
我想可以编写一个代码将它分成无数简单的表达式,计算它们并将它们加在一起,但这需要相当长的时间,而且我可能会遇到很多麻烦.
所以...我的问题,有没有"简单"的方法来做到这一点?
c# ×9
.net ×3
c++ ×2
evaluation ×2
expression ×2
math ×2
c ×1
c++11 ×1
calculator ×1
compilation ×1
javascript ×1
logic ×1
parsing ×1
runtime ×1
string ×1