我正在尝试解决:
int total=0, number=0;
float percentage=0.0;
percentage=(number/total)*100;
printf("%.2f", percentage);
如果数字的值是 50 并且总数是 100,我应该得到 50.00 的百分比,这就是我想要的。但我一直得到 0.00 作为答案,并尝试了对类型的许多更改,但它们没有奏效。
整数除法会截断,因此(50/100)
结果为 0。您可以先转换为float
(better double
) 或乘以100.0
(for double
precision, 100.0f
for float
precision),
double percentage;
// ...
percentage = 100.0*number/total;
// percentage = (double)number/total * 100;
或者
float percentage;
// ...
percentage = (float)number/total * 100;
// percentage = 100.0f*number/total;
由于浮点运算不具有关联性, 和 的结果100.0*number/total
可能(double)number/total * 100
略有不同(对于 也是float
如此),但极不可能影响小数点后的前两位,因此您选择哪种方式可能并不重要。
C中的整数除法会截断结果,所以50/100
会给你0
如果您想获得所需的结果,请尝试以下操作:
((float)number/total)*100
或者
50.0/100
不,因为您使用整数进行表达式,所以您将整数50 除以整数100,结果为整数0。将其中一个类型转换为 a float
,它应该可以工作。
你正在做整数算术,所以结果是正确的。尝试
percentage=((double)number/total)*100;
顺便说一句,%f
期望 adouble
不是 a float
。纯粹靠运气在这里转换,所以效果很好。但通常你现在主要double
在 C 中用作浮点类型。
如果我想要浮点数,我通常会乘以 1.0,这比记住规则要容易。
这应该会给你你想要的结果。
double total = 0;
int number = 0;
float percentage = number / total * 100
printf("%.2f",percentage);
请注意,第一个操作数是双精度
将您的代码更改为:
int total=0, number=0;
float percentage=0.0f;
percentage=((float)number/total)*100f;
printf("%.2f", (double)percentage);
这可以给你正确的答案
#include <stdio.h>
int main()
{
float total=100, number=50;
float percentage;
percentage=(number/total)*100;
printf("%0.2f",percentage);
return 0;
}