0

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

  • "5"- 持续的
  • "3.1415 * 0.25"- 常量表达式
  • "{0} - 50"- 带有值占位符 ( String.Format())的表达式
  • "Abs({0} - 50)"- 就像 up 但有数学函数

到目前为止,我一直在使用 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”和“decimal”类型的操作数 NCalc.Numbers.Multiply(object, object) NCalc.Domain.EvaluationVisitor.Visit(NCalc.Domain.BinaryExpression) NCalc.Domain.BinaryExpression。接受(NCalc.Domain.LogicalExpressionVisitor)NCalc.Expression.Evaluate()

似乎 Abs() 方法返回小数并且 NCalc 无法处理和之间的计算doubledecimal可能是错误?)。所以我想问一下我可以使用哪些替代库来代替 NCalc?或者也许除了表达式还有其他解决方法:

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

?

4

1 回答 1

1

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

使用示例:

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

遵循mXparser 教程

问候

于 2017-04-08T19:21:18.103 回答