我正在尝试使用进度对话框来显示完成2次密集型功能的时间。
在我的第一个函数中,我有db条目的总数和一个计数器,表示我经历了do / while循环的次数。完成后,进度对话框应为50%
所以我这样做:
double total = (counter/dbEntries)*100; //counter and dbEntries are both int's
然后我将总数除以2
,因为我想要完成一半的金额,因为有2个函数
double realPercentDone = total/2.0;
所以说counter is 3
和dbEntries is 36
等于0.08 or 8% when multiplied by 100
,但总数为0.我做错了什么?
答案 0 :(得分:3)
如果counter
和dbEntries
都是整数,则可能在第一个表达式的括号中执行整数除法。 3 div 36 = 0
。
尝试将其更改为以下内容:
double total = 100.0 * counter / dbEntries;
或
double total = (1.0 * counter / dbEntries) * 100.0;
注意:使用100.0
而不是100
,以便进行浮点计算。
答案 1 :(得分:0)
您应该投射,或使用counter
和entries
的双重类型。我假设你现在正在使用整数,并且当进入时,3/36 = 0,当然0 * 100仍然是0。
答案 2 :(得分:0)
另外,请注意,如果你总是将总数除以2,那么你永远不会达到100%,你将在0%到50%之间。