2012-03-19 186 views
1

我在Excel中計算需要用C#編寫時遇到了一些麻煩。C#中的Excel公式計算#

在Excel中計算是這樣的:

=(26/1000*1,500+(0,0000039096*(26*26)+0,000082819*26+0,005066))*149468556,2 
*(1+0,10%) 

這給出的結果:7310663,398

在C#我具有完全相同的計算(除了在14949 ..數更小數:

(26.0/1000.0 * 1.500 + (0.0000039096 * (26.0 * 26.0) + 0.000082819 * 26.0 + 0.005066)) * 149468556.2 * (1 + 0.1); 

其中給出這樣的結果:7632589.7787303319

由於公式中的最後一個數字是百分之我也試過這樣:

(26.0/1000.0 * 1.500 + (0.0000039096 * (26.0 * 26.0) + 0.000082819 * 26.0 + 0.005066)) * 149468556.2 * (1 + (0.1/100)); 

哪個給出了這樣的結果:6945656.6986446008

當然,我需要匹配的Excel結果在C#中,但我米總是堅持如何實現這一目標。猜猜我應該在數學課中仔細聆聽;-)

任何幫助/輸入對此非常感謝!

在此先感謝。

一切順利,

+2

爲什麼不打破的公式更簡單的東西,並縮小問題的範圍?就精度而言,Excel的數字與C#的行爲不同。可能你是這個的受害者。 – tenfour 2012-03-19 10:18:54

+2

嘗試更改'26/1000'到'26.0/1000.0'來執行雙倍分割而不是整數。 – Henrik 2012-03-19 10:21:51

+0

tenfour:我已經嘗試過了,但是我不得不承認,在數學方面我完全愚蠢:(根本無法得到正確的結果.. – bomortensen 2012-03-19 10:24:16

回答

2

你有一個錯字。在Excel中,您使用(1+0,10%)並且在C#中使用了(1 + 0.1)

由於0.10%確實是0.10/100,您應該改用(1 + 0.001)

所以正確的C#是:

(26.0/1000.0 * 1.500 + 
    (0.0000039096 * (26.0 * 26.0) + 0.000082819 * 26.0 + 0.005066)) * 
    149468556.2 * (1 + 0.001); 
1

我的建議是讓所有的小數。這可能是一個精確的錯誤。

你的結果與你應該得到的結果相似,這意味着它不是一個計算錯誤(例如忘記除以100等等,這將直接顯示在你的結果中)。

0

好ATLEAST這給我結果

double ds = (26.0/1000.0 * 1.500 + (0.0000039096 * (26.0 * 26.0) + 0.000082819 * 26.0 + 0.005066)) * 149468556.2 * (1.0 + 0.1/100.0); 
Console.WriteLine(ds.ToString()); 

結果7310663.39550679