2017-01-10 168 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