运算符“+”不能应用于 'decimal' 和 'double' 类型的操作数 - NCalc
Operator '+' can't be applied to operands of types 'decimal' and 'double' - 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
我还在他们的论坛上发布了一个问题,但 Whosebug 通常更动态。
https://ncalc.codeplex.com/discussions/613634
经过简短的 chat with btevfik(有帮助的家伙)我们得出结论,这是 NCalc 中的一个错误。
我想我将不得不分析源代码并修复它。
虽然我仍然接受答案...
好的。我查看了源代码。这是我发现的。
表达式的 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添加到double中。
例如,您不能编译此片段(注意 m 为十进制)。 Math.Abs(-1m) + Math.Cos(2);
当你输入
时,这实际上是 NCalc 试图做的
new Expression("Abs(-1) + Cos(2)").Evaluate()
我认为这是一个错误。您可以尝试编辑源代码并尝试解决此问题或找到其他选项。
我正在使用 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
我还在他们的论坛上发布了一个问题,但 Whosebug 通常更动态。 https://ncalc.codeplex.com/discussions/613634
经过简短的 chat with btevfik(有帮助的家伙)我们得出结论,这是 NCalc 中的一个错误。 我想我将不得不分析源代码并修复它。
虽然我仍然接受答案...
好的。我查看了源代码。这是我发现的。
表达式的 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添加到double中。
例如,您不能编译此片段(注意 m 为十进制)。 Math.Abs(-1m) + Math.Cos(2);
当你输入
new Expression("Abs(-1) + Cos(2)").Evaluate()
我认为这是一个错误。您可以尝试编辑源代码并尝试解决此问题或找到其他选项。