预计剩余时间,我错过了什么?

时间:2013-07-15 16:22:46

标签: c#

我认为我的逻辑存在缺陷......

在循环中我有:

int seconds = (int) (elapsed.TotalSeconds / ItemPos) * (Count - ItemPos);

这个循环大约每秒更新一次....

我遇到的问题是,秒总是以零(0)值结束。

这是因为ItemPos值在第一次循环后总是高于elapsed.TotalSeconds

例如:

如果超过3秒

ItemCount = 20 , so 3/20 = 0.15 - rounds to zero.... 0 * anything = 0......

我做错了什么?

2 个答案:

答案 0 :(得分:8)

您的表达式被解释为

( (int)(elapsed.TotalSeconds / ItemPos) ) * (Count - ItemPos);

你必须延迟类型转换,你需要的只是一对()

 //int seconds = (int)   (elapsed.TotalSeconds / ItemPos) * (Count - ItemPos)  ;
   int seconds = (int) ( (elapsed.TotalSeconds / ItemPos) * (Count - ItemPos) );

答案 1 :(得分:6)

整数除法总是返回一个int,当你的结果为0.something时,它会截断为0。

创造一些真正有价值的东西,你很好。或者,在分割前相乘:

int seconds =(int)((float)elapsed.TotalSeconds / ItemPos)*(Count - ItemPos);

(见下文)

 int seconds = (int) (elapsed.TotalSeconds * (Count - ItemPos) / ItemPos);

修改

根据dtb的评论,我意识到我把我的类型转移到了错误的地方。我的第一行不起作用(虽然我的第二行仍然会)。发生了什么事情是你从TotalSeconds中取出双倍值并将其除以int ItemPos以得到一倍。但是你将它转换为int,这是你将它设置为0的地方。正如Henk Holterman所说,你必须添加额外的括号,以便在整个部门进行类型转换:

 int seconds = (int) ((elapsed.TotalSeconds / ItemPos) * (Count - ItemPos));