26

我正在尝试解决:

int total=0, number=0;
float percentage=0.0;

percentage=(number/total)*100;
printf("%.2f", percentage);

如果数字的值是 50 并且总数是 100,我应该得到 50.00 的百分比,这就是我想要的。但我一直得到 0.00 作为答案,并尝试了对类型的许多更改,但它们没有奏效。

4

8 回答 8

35

整数除法会截断,因此(50/100)结果为 0。您可以先转换为float(better double) 或乘以100.0(for doubleprecision, 100.0ffor floatprecision),

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如此),但极不可能影响小数点后的前两位,因此您选择哪种方式可能并不重要。

于 2012-11-23T13:40:34.873 回答
8

C中的整数除法会截断结果,所以50/100会给你0

如果您想获得所需的结果,请尝试以下操作:

((float)number/total)*100

或者

50.0/100
于 2012-11-23T13:40:03.310 回答
2

不,因为您使用整数进行表达式,所以您将整数50 除以整数100,结果为整数0。将其中一个类型转换为 a float,它应该可以工作。

于 2012-11-23T13:39:32.610 回答
2

你正在做整数算术,所以结果是正确的。尝试

percentage=((double)number/total)*100;

顺便说一句,%f期望 adouble不是 a float。纯粹靠运气在这里转换,所以效果很好。但通常你现在主要double在 C 中用作浮点类型。

于 2012-11-23T13:39:37.713 回答
2

如果我想要浮点数,我通常会乘以 1.0,这比记住规则要容易。

于 2018-06-13T01:57:53.127 回答
0

这应该会给你你想要的结果。

double total = 0;
int number = 0;
float percentage = number / total * 100
printf("%.2f",percentage);

请注意,第一个操作数是双精度

于 2012-11-23T13:41:05.787 回答
0

将您的代码更改为:

int total=0, number=0;
float percentage=0.0f;

percentage=((float)number/total)*100f;
printf("%.2f", (double)percentage);
于 2012-11-23T14:21:37.280 回答
0

这可以给你正确的答案

#include <stdio.h>
int main()
{
    float total=100, number=50;
    float percentage;
    percentage=(number/total)*100;
    printf("%0.2f",percentage);
    return 0;
}
于 2018-12-16T03:01:25.000 回答