运营商' +'不能应用于类型'十进制'的操作数。和' double' - NCalc

时间:2015-03-25 12:19:32

标签: c# .net ncalc

我使用NCalc来评估复杂的表达式。但我发现了一个重大问题。

new Expression("Abs(-1) + Cos(2)").Evaluate()之类的简单公式会引发异常

Operator '+' can't be applied to operands of types 'decimal' and 'double

在C#代码中Math.Abs(-1) + Math.Cos(2)有效,所以要么我做错了,要么NCalc中有错误。

有没有人遇到同样的问题?

有没有人有解决方案?

我在项目网站上发现的与此错误相关的唯一主题是相当陈旧,并讨论了如何编辑源代码。 https://ncalc.codeplex.com/discussions/346702

我还在他们的论坛上发布了一个问题,但StackOverflow通常更具活力。 https://ncalc.codeplex.com/discussions/613634

2 个答案:

答案 0 :(得分:1)

确定。我查看了源代码。这就是我发现的。

表达式的Abs(-1)部分始终被计算为小数

Result = Math.Abs(Convert.ToDecimal(
                        Evaluate(function.Expressions[0]))
                        );

Cos(2)被评估为double

Result = Math.Cos(Convert.ToDouble(Evaluate(function.Expressions[0])));

并且C#不允许您将这两种类型添加到一起。

Math.Abs(-1) + Math.Cos(2)的作用原因是Math.Abs​​(-1)实际上计算为int。你可以完美地添加一个int来加倍。

你不能编译这个例子(注意m为十进制)。 Math.Abs(-1m) + Math.Cos(2); 这实际上是NCalc在你输入时试图做的事情

new Expression("Abs(-1) + Cos(2)").Evaluate()

我称之为错误。您可以尝试编辑源并尝试解决此问题或找到其他选项。

答案 1 :(得分:0)

在短暂的chat with btevfik(有帮助的家伙)之后,我们得出结论,这是NCalc中的一个错误。 我想我必须分析来源并修复它。

我仍然接受答案......