NCalc expression.evaluate 输出与我手动计算表达式时不同
NCalc expression.evaluate output different from when I compute the expression manually
这是我的代码:
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"))
它returns:3,502.90,但是当我通过excel手动计算它时,我得到的输出是:3371.888737
这是我手动计算的图像...
Manual Computation
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。手写不执行四舍五入
这是我的代码:
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"))
它returns:3,502.90,但是当我通过excel手动计算它时,我得到的输出是:3371.888737
这是我手动计算的图像...
Manual Computation
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。手写不执行四舍五入