我正在尝试使用一个后台 worker ,它为字典中的每个键将内容保存到文件中。 ACon 是一个个人类,它在其中调用字典内容的保存函数。
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++;
}
}
我希望它通过提供它所在的 key /总 key * 100 百分比来报告进度,但这没有用。
不管我用什么类型的pctg; short、int、float、double、num/Len 始终 = 0,但如果我将其调换,Len/num 会给出正确的值。添加或删除括号不会改变任何内容。我是不是太傻了,漏掉了什么,还是我写错了什么?
这是一些来自 VS2010(专业版)的截图
pctg 为双:
pctg 为 float :
pctg 为 double,没有括号:
交换了 Len 和 num 的 pctg:
最佳答案
不是你在改变pctg的类型,它是基于num和Len的类型
尝试:
float pctg = ((float)num / (float)Len);
如果 num
和 Len
都是整数,那么您的代码将执行整数除法,然后将该整数转换为 float 。
正如下面@CDspace 所提到的,整数除法将舍入到最接近的整数,在您的情况下为零。然后将零转换为任何其他类型仍然是零。
关于C# 后台 worker 划分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20554935/