2015-03-25 502 views
-4

我正在使用NCalc来评估复杂表达式。但是我发现了一个重大问题。运算符'+'不能应用于'decimal'和'double'类型的操作数 - 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

+0

您是否试图首先搜索此错误? – nikis 2015-03-25 12:22:34

+0

你需要将它们转换为相同的类型。 – btevfik 2015-03-25 12:23:12

+0

@btevfik,你如何建议我这样做? – pitermarx 2015-03-25 13:40:45

回答

1

好的。我查看了源代码。这是我发现的。

表达的ABS(-1)部分总是被判断为一个十进制

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

的Cos(2)被评价为双

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() 

我会称这是一个错误。您可以尝试编辑源代码并尝试修复此问题或找到其他选项。

+0

谢谢。该项目虽然稳定可用,但似乎有点遗弃。我想唯一的选择是试图修复这个 – pitermarx 2015-03-25 16:06:44

+0

看来问题已经解决了。它只是没有部署为一个版本https://ncalc.codeplex.com/SourceControl/changeset/5a719518101d – pitermarx 2015-03-25 16:28:39

+0

@pitermarx好。 :) – btevfik 2015-03-25 16:37:25

0

经过简短的chat with btevfik(helpfull fella)之后,我们得出结论,这是NCalc中的一个错误。 我想我将不得不分析源代码并修复它。

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

相关问题