2017-01-10 169 views
0

这里是我的代码:NCalc expression.evaluate输出不同的手动

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

回答

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) 

PS你不会在手工书写中四舍五入

+0

作品就像一个魅力......万分感谢先生! :) – napster