2013-12-12 53 views
3

我想要使用一個背景工作者,爲字典中的每個鍵保存內容到文件。 ACon是一個個人類,它調用其中一個字典內容的保存功能。C#背景工作者divison

private void bwSaver_DoWork(object sender, DoWorkEventArgs e) 
    { 
     string[] Keys = ACon.GetKeys(); 
     int num = 0; 

     foreach (string s in Keys) 
     { 
      ACon.Save(s); 
      int Len = Keys.Length; 
      double pctg = (num/Len); 

      //Below was by first attempt at getting the percentage. Above are my debugging attempts. 
      bwSaver.ReportProgress(num/Keys.Length*100); 
      num++; 
     } 
    } 

我希望它給它的開/總鑰匙* 100個重點報告的進展,但這個是行不通的。

無論我用什麼類型的pctg; short,int,float,double,num/Len always = 0,但是如果我切換它,Len/num會給出正確的值。添加或刪除括號不會改變任何內容。我只是在愚蠢和錯過某些東西,或者我在錯誤地編碼?

下面是從VS2010(專業)一些截圖

PCTG爲雙: pctg as double

PCTG作爲浮動: pctg as float

PCTG如雙,不帶括號: pctg as double, without brackets

PCTG與萊恩和num交換: pctg with Len and num swapped

回答

2

它不是你正在改變類型PCTG,基於該類型NUM和Len

嘗試它:

float pctg = ((float)num/(float)Len); 

如果numLen都是整數,那麼你的代碼會進行整數除法,之後它會將該整數轉換爲浮點數。

正如以下@CDspace所述,整數除法將四捨五入到最接近的整數,在你的情況下,爲零。然後將零轉換爲任何其他類型仍然爲零。

+0

這是有效的,但是如果是這樣的話,Len/num如何在沒有投射的情況下給出結果? – Ewan

+1

len/num是否給出整數值?沒有演員,你正在做整數除法(如果len和num是整數),所以你繞到最近的整數。 – paqogomez

+0

哦,是的......感謝你! – Ewan