我正在尝试使用后台工作程序,它将字典中的每个键保存到文件中。 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++;
}
}
我希望它能够通过给出关键字/ /总密钥* 100来报告进度,但这不起作用。
无论我使用什么类型的pctg; short,int,float,double, num / Len always = 0,但是如果我将其切换, Len / num 会给出正确的值。添加或删除括号不会改变任何内容。我只是愚蠢而且缺少某些东西或者我编码错了吗?
以下是VS2010(专业版)的一些截图
pctg as double:
pctg as float:
pctg为double,不带括号:
pctg与Len和num交换:
答案 0 :(得分:2)
它不是你要改变pctg的类型,它基于num和Len的类型
尝试:
float pctg = ((float)num / (float)Len);
如果num
和Len
都是整数,那么您的代码将执行整数除法,之后它会将该整数转换为浮点数。
如下面的@CDspace所述,整数除法将舍入到最接近的int,在您的情况下为零。然后将零转换为任何其他类型仍为零。