我认为我的逻辑存在缺陷......
在循环中我有:
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......
我做错了什么?
答案 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));