2011-02-04 115 views
4

我有两个整数(两个文件的字节数)。如果不是一样的话,它总是比较小。我想计算较小的百分比。找到一个整数到另一个整数的百分比

我用我已经应用了数学公式平原C.,但我总是得到0:

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

任何想法?

回答

9

尝试

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

代替。整数除法总是趋向于零。首先将其中一个数字转换为double,您将触发浮点除法。如果你想使用整数算术,你也可以使用

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

这将打印向下舍入到下一个整数的百分比。

+1

谢谢,你在第二个例子中有一个额外的括号;)。 – 2011-02-04 16:25:12

0

更好的尝试:

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

因为答案将在浮点。

3

斯文给你提供了很好的建议。

如果你想让你的整数,做乘法除法之前:

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

你会得到一个四舍五入的结果。

numerator < denominator完成的积分除法总是给出0.这就是对“永远为0”问题的解释。将让您的划分(百分比)

MY2C的组成部分之前乘以100

2

我建议这样做除法之前扩大提名者:

const float ratio = (100.f * current)/total; 

这里,使100浮点文字会促进计算,因此不需要明确的演员表演也是一种好处。

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/