2013-10-19 51 views
0

我已經插入式雙在應用程序/設置文件的變量,我使用的是「而」循環做一個小的計算:雙重價值產生

double final=0; 
double cost = application.settings.default.cost; // 0.15 
while(true) 
{ 
    Thread.Sleep(1000); //speeded up version of 60000 (1 minute) 
    final+=cost; 
    //code that waits for the user to quit the loop 
} 

1小時後的結果應該是9.00,但它計算到像24.00:/ 但是,如果我在硬編碼值的代碼,我得到的9.00

double final=0; 
double cost = 0.15 
while(true) 
{ 
    Thread.Sleep(1000); //speeded up version of 60000 (1 minute) 
    final+=cost; 
    //code that waits for the user to quit the loop 
} 

任何想法所期望的結果?

+0

使用調試器並查看設置中返回的值是什麼? –

+0

@Jeroen Vannevel甚至沒有跨過我的腦海:/結果很奇怪,它顯示爲0.4 – user2864613

+1

這解釋了不同的結果。現在,你確定'application.settings.default.cost'指向一個值'0.15'嗎? –

回答

3

Thread.Sleep(1000);並不意味着你的代碼每秒都會被執行。 如果你以這種方式運行你的代碼10次1小時,你將得到10個不同的結果。

這是這裏討論以及: How accurate is Thread.Sleep(TimeSpan)?

(雖然有Thread.sleep代碼使用了具有時間跨度的主要問題保持不變。)

編輯:

我不不知道你在計算什麼。但以這種方式計算成本並不是一個好方法,因爲它是非常不準確的。

當你開始計算你的成本,並在完成時再採取一個時間戳的時候更好。拿兩個時間戳的差別,你可以相當準確地計算成本。您的代碼運行時間越長,您的方法越失敗。

+2

結果差異太大9/0.15是60次迭代,24/0.15是160次迭代,甚至佔線程睡眠差異的毫秒數,有些不同的是在這裏工作 – Steve

+0

這裏還是沒有運氣..猜我會硬編碼它現在。不知道爲什麼有人降低了..也許他們想提供一些幫助,而不是? :) – user2864613