2013-12-12 3 views
3

Я пытаюсь использовать фона рабочего, который для каждой клавиши в словаре сохраняет содержимое в файл. ACon - это персональный класс, который вызывает функцию сохранения содержимого содержимого в нем.C# Background Worker 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 (Professional)

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 и Лен

Try:

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

Если оба значения num и Len являются ints, тогда ваш код будет делать целочисленное деление, после чего он будет отличать это целое число с поплавком.

Как уже упоминалось в @CDspace ниже, целочисленное деление будет округлено до ближайшего int, в вашем случае, ноль. Тогда приведение нуля к любому другому типу все равно равно нулю.

+0

Это работает, но если это так, то почему при переключении Len/num получается результат без каста? – Ewan

+1

Имеет ли len/num целое целое значение? Без каста вы выполняете целочисленное деление (если len и num - ints), поэтому вы округлите до ближайшего int. – paqogomez

+0

О да ... Спасибо за это! – Ewan