找到一个整数与另一个整数的百分比

时间:2011-02-04 16:15:54

标签: c math

我有两个整数(两个文件的字节数)。如果不是相同的话,一个总是更小。我想计算较小的百分比。

我正在使用普通的C.我已经应用了数学公式,但总是得到0:

printf("%d\r", (current/total)*100);

有什么想法吗?

5 个答案:

答案 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));

退房:

http://www.cplusplus.com/reference/clibrary/cstdio/printf/