2015-03-25 125 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中的一個錯誤。 我想我將不得不分析源代碼並修復它。

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

相關問題