解析数学表达式

Bra*_*don 8 .net c# c#-4.0

是否有一种简单的方法来解析表示为字符串的简单数学表达式,如(x +(2*x)/(1-x)),为x提供值,并获得结果?

我查看了几个在线示例中的VSAEngine,但是,我收到一个警告,该程序集已被弃用而不使用它.

如果它有任何差异,我使用的是.NET 4.0.

Joe*_*orn 11

我强烈建议不要在特定的数学评估器上选择现有的通用表达式求值程序.这样做的原因是表达式评估者不仅限于数学.一个聪明的人可以使用它在框架中创建任何类型的实例并调用该类型的任何方法,这将允许他做一些明显不受欢迎的事情.例如:new System.Net.WebClient().DownloadFile("illegalchildpornurl", "C:\openme.gif")在大多数情况下会评估得很好,并且做到它听起来会是这样(并且同时让你成为重罪犯).

这并不意味着不要寻找已经写好的东西.这只是意味着要小心.你想要一个做数学,只做数学的人.已经存在的大部分内容都不那么挑剔.

  • 这个例子有点过头了,你可以直接做“illegalurl” (6认同)

Ler*_*gan 8

我最近使用的是mXparser,它是一个数学解析器库.它为您提供了很多灵活性,例如变量,函数,常量,运算符.您将在下面找到一些使用示例:

例1 - 简单的公式

Expression e = new Expression("1 + pi");
double v = e.calculate();
Run Code Online (Sandbox Code Playgroud)

示例2 - 包含变量,函数等的公式

Argument x = new Argument("x = 2");
Constant a = new Constant("a = sin(10)");
Function f = new Function("f(t) = t^2");
Expression e = new Expression("2*x + a - f(10)", x, a, f);
double v = e.calculate();
Run Code Online (Sandbox Code Playgroud)

https://mxparser.codeplex.com/

http://mathparser.org/

最好的祝福


小智 5

您可以尝试使用DataTable.Compute.

一个相关的是DataColumn.Expression.

另请查看:在jb中使用像Eval这样的vb.net中的数学运算

注意:我自己没有使用过这些.