无法使用Mathos math Prser计算数学表达式
本文关键字:计算 表达式 Prser math Mathos | 更新日期: 2023-09-27 18:28:07
我正在使用Mathos数学解析器来评估数学表达式。我正在尝试分析以下表达式,但它抛出FormatException-输入字符串的格式不正确。。
Mathos.Parser.MathParser parser = new Mathos.Parser.MathParser();
string expression = "Math.pow((4),(5))"; //Or "Math.sqrt(1)";
string result = parser.Parse(expression).ToString();
在我的应用程序中,我使用的是MathDox-mathml编辑器,它给了我mathml。使用这个mathml,我使用这里给出的javascript将其解析为普通数学表达式,然后将这个表达式发送到我的c#代码中进行评估。我的表情有什么不对。
注意:由于某些条件,我不会评估javascript中的数学表达式。
它之所以不起作用,是因为pow函数被定义为localFunction。下面的代码应该可以工作:
Mathos.Parser.MathParser parser = new Mathos.Parser.MathParser();
string expression = "pow(4,5)";
string result = parser.Parse(expression).ToString();
// or
string expression2 = "4^5";
string result2 = parser.Parse(expression2).ToString();
Assert.AreEqual(result, result2);
基本上,为了使用Math.Pow函数,您可以使用内置幂运算符或内建幂函数。
您可以随时更改幂函数的定义。这是目前的定义:
- 电源功能:
LocalFunctions.Add("pow", x => (decimal)Math.Pow((double)x[0], (double)x[1]));
- 电源操作员:
OperatorList.Add("^");
和OperatorAction.Add("^", (numberA, numberB) => (decimal)Math.Pow((double)numberA, (double)numberB));