字符串中的数学表达式:NCalc

时间:2017-04-05 13:59:07

标签: c# string math expression ncalc

我需要从文件数学表达式中读取并评估它的值。示例表达格式如下:

  • "5" - 常数
  • "3.1415 * 0.25" - 常量表达式
  • "{0} - 50" - 包含值占位符的表达式(String.Format()
  • "Abs({0} - 50)" - 就像数学函数一样,

到目前为止,我一直在使用NCalc,它工作得很好,直到它必须处理如下的表达式:

  • "3.0 * Abs({0} + 34)"

不幸的是,在以下代码的结果上方的示例中:

var value = ReadValueFromSomewhere(); // Lets say it returns 125.75
var exprStr = ReadExpression(); // returns: "3.0 * Abs({0} + 34)"
var toEval = String.Format(exprStr, value);
var result = new NCCalc.Expression(toEval).Evaluate()

是例外:

  

System.InvalidOperationException

     

运营商' *'不能应用于类型的操作数' double'和'十进制'   NCalc.Numbers.Multiply(对象,对象)   NCalc.Domain.EvaluationVisitor.Visit(NCalc.Domain.BinaryExpression)   NCalc.Domain.BinaryExpression.Accept(NCalc.Domain.LogicalExpressionVisitor)   NCalc.Expression.Evaluate()

似乎Abs()方法返回十进制数,NCalc无法处理doubledecimal之间的计算(可能是bug?)。所以我想问一下我可以使用哪些替代库代替NCalc?或许还有其他解决方法而不是表达式:

  • "Abs(3.0) * Abs({0} + 34)"

1 个答案:

答案 0 :(得分:0)

你是什么意思"带有值占位符的表达式"?你能举出更具体的例子吗?您可以尝试mXparser - 它适用于Java和.NET。

使用示例:

Expression e = new Expression("3.1415 * 0.25");
double v = e.calculate();

关注mXparser tutorial

此致