下面中的这段代码 progressBar1.Value = (int)(((i + 1) / 50000.0) * 100); value的值是0;为什么进度条还能跑???帮帮忙各位 using System; namespace 其他控件 private void button1_Click(object sender, EventArgs e) } |
|
1分 |
progressBar1.Value = (int)(((i + 1) / 50000.0) * 100);
除的是double,不是int,所以最终结果不是0 |
1分 |
很奇怪楼主为什么要除以一个double数! |
能在说明白一点吗 |
|
1分 |
int/int,这是整除,49999/50000 =0
int/double,49999/50000.0=0.99998 这样懂了吗,不是你以为得到的0 |
1分 |
做除法前要先转化成浮点运算
|
5分 |
for (int i = 0; i < 50000; i++) { textBox1.Text = i.ToString(); progressBar1.Value = (int)(((i + 1) / 50000.0) * 100); textBox1.Text = ((int)(((i + 1) / 50000.0) * 100)).ToString(); Application.DoEvents(); } 你的计算表达式,就是将0~5000之间的数投影在0~100之间的数轴上的。你怎么能说它一直为0呢? |
1分 |
当 i+1 >= 500 时 (int)(((i + 1) / 50000.0) * 100) >=1
这就是能跑的原因 |
那2/50000.0=0.00004强转不就是0; |
|
1分 |
撸主,
for循环,每次 (int)(((i + 1) / 50000.0) * 100)的值是变化的撒 这个是你看到进度的原因 |
1分 |
(int)(((i + 1) / 50000.0) * 100)
这个表达式从0一直跑到100,而且它的结果也确实是整数值! |
1分 |
是的,很多人没有在意(int)转换。 唉,前边的就不说了,毕竟都有不小心犯糊涂的时候。后边的确实有“从众心理”作怪啊! |
2分 |
但是当i>499时,(500/50000.0)*100的值是1啊,所以你的进度条还是会走 |
1分 |
for (int i = 0; i < 50000; i++)
{ 你把代码写在了for循环里,还没加sleep,那么当然一点按钮,值就直接从0变成100了,根本看不到变成1,2,3,的过程 |
1分 |
你可以测试一下,循环50000次需要几毫秒
反正根本不是你眼睛能识别的 |
1分 |
取几个i带入一下就行了….高中的时候数学题各种代入法,做选择题判断题简直神器,把那帮学的比较死脑筋的同学唬的一愣一愣的
|
我的问题好像没有解决哦 |
|
1分 |
你有没有自己动手运行一下 #7 楼的程序呢? 如不自己动手而只是动嘴,你是自己的解决问题方式让你跨不进门槛里。 |
运行了,我明白了象(2/50000.0)*100=0.004,(500/50000.0)*100=1; |
|
(2/50000.0)*100=0.4 |