无法使用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中的数学表达式。

无法使用Mathos math Prser计算数学表达式

它之所以不起作用,是因为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函数,您可以使用内置幂运算符内建幂函数

您可以随时更改幂函数的定义。这是目前的定义:

  1. 电源功能:LocalFunctions.Add("pow", x => (decimal)Math.Pow((double)x[0], (double)x[1]));
  2. 电源操作员:OperatorList.Add("^");OperatorAction.Add("^", (numberA, numberB) => (decimal)Math.Pow((double)numberA, (double)numberB));