我有两个整数(两个文件的字节数)。如果不是相同的话,一个总是更小。我想计算较小的百分比。
我正在使用普通的C.我已经应用了数学公式,但总是得到0:
printf("%d\r", (current/total)*100);
有什么想法吗?
答案 0 :(得分:9)
尝试
printf("%g\r", (((double)current)/total)*100);
代替。整数除法总是向零舍入。通过首先将其中一个数字转换为double
,您将触发浮点除法。如果您想使用整数运算,您也可以使用
printf("%d\r", (100*current)/total);
将打印百分比向下舍入到下一个整数。
答案 1 :(得分:4)
斯文给你很好的建议。
如果你想保留整数,请在除法之前进行乘法运算:
printf("%d\r", (current * 100) / total);
你会得到一个圆润的结果。
用numerator < denominator
完成的积分除法总是给出0.这就是你的“总是0”问题的解释。除以前乘以100得到你师的不可分割部分(百分比)
MY2C
答案 2 :(得分:2)
我建议在进行分割前扩大提名者:
const float ratio = (100.f * current) / total;
在这里,使100成为浮点文字将促进计算,因此不需要显式强制转换,这也是一个好处。
答案 3 :(得分:0)
最好尝试:
printf("%lf\r", (((double)current)/total)*100);
由于答案将处于浮点状态。
答案 4 :(得分:0)
整数除法向下舍入,所以如果你的答案小于1,你将得到0。
您可以尝试这样的事情:
printf("%d\r", ((current*100)/total));
但是你总会得到一个整数。
如果你将分子转换为浮点数,你将获得浮动除法和正确答案。
printf("%f\r", ((float)current/total * 100));
但是,您可能希望在例如小数点前的3位数和使用后的2位数后截断零:
printf("%3.2f\r", ((float)current/total * 100));
退房: