【发布时间】:2009-09-06 19:21:23
【问题描述】:
对字符串中的值进行计算的最佳方法是什么,例如: "(3.25 * 4) / 1.25 + 10"
【问题讨论】:
-
这已在 Stack Overflow 上出现:stackoverflow.com/questions/1384811/…(我最初投票关闭是因为另一个问题是错误的,这是错误的,我现在无法更改)
标签: c#
对字符串中的值进行计算的最佳方法是什么,例如: "(3.25 * 4) / 1.25 + 10"
【问题讨论】:
标签: c#
您需要编写数学公式解析器。 如果你不想自己写,看看这个
【讨论】:
你见过http://ncalc.codeplex.com 吗?
它是可扩展的、快速的(例如有自己的缓存),使您能够通过处理 EvaluateFunction/EvaluateParameter 事件在运行时提供自定义函数和变量。它可以解析的示例表达式:
Expression e = new Expression("Round(Pow(Pi, 2) + Pow([Pi2], 2) + X, 2)");
e.Parameters["Pi2"] = new Expression("Pi * Pi");
e.Parameters["X"] = 10;
e.EvaluateParameter += delegate(string name, ParameterArgs args)
{
if (name == "Pi")
args.Result = 3.14;
};
Debug.Assert(117.07 == e.Evaluate());
它还原生处理 unicode 和许多数据类型。如果您想更改语法,它会附带一个 antler 文件。还有一个 fork 支持 MEF 加载新功能。
它还支持逻辑运算符、日期/时间字符串和 if 语句。
【讨论】:
从中缀转换为后缀表示法是解决此问题的一种方法,因为您可以使用堆栈来解析和计算表达式。
网上有十几种解决方案。这里是one of them。
【讨论】: