NCalc表达式。评估输出与手动计算表达式时的输出不同

时间:2017-01-10 01:02:14

标签: math expression ncalc

这是我的代码:

Dim ex As String = "(((105 * 4000) * 0.20) - ((0 + 10000) * (105 * 4000)) / ((105 * 4000) + Round((52 * 18192.31),0))) / 24"
Dim x As New Expression(ex)
Dim result As Decimal = x.Evaluate
Console.WriteLine(result.ToString("N"))

它返回: 3,502.90 ,但是当我手动计算并通过excel输出时,我得到的是: 3371.888737

这是我手动计算的图像......

Manual Computation

1 个答案:

答案 0 :(得分:0)

3,502.90 * 24 = 84089.6

它比第一个加数大。第二个应该是积极的。

但是你在这个表达式

中有32位整数算术的溢出
(0 + 10000) * (105 * 4000) = 4 200 000 000 > 2^31-1

这就是为什么第二个加数变为负数(和a1-(a2)> a1)

可能使用这样的双打就足够了:

  (0.0 + 10000) * (105.0 * 4000)

P.S。您不要在手动编写

中执行舍入