C中的浮点

时间:2011-09-12 23:30:59

标签: c floating-point

我要求用户在C中输入两个非负整数值。然后我想将它们转换为百分比(表示为小数)。不幸的是,我的float即将成为零。为什么会这样,我该如何解决?

int a = 5;
int b = 10;
int total = a + b;

float a_percent = a / total;
float b_percent = b / total;

printf("%.2f, %.2f\n", a_percent, b_percent);

7 个答案:

答案 0 :(得分:2)

你没有使用浮点数,你使用的是整数,因此积分除数给出零(然后指定给浮点数)。

要执行浮点运算,必须先将整数(或至少其中一个)转换为浮点数。方便的是,我们只使用total

float total = a + b; // exact
float ap = a / total;
float bp = b / total; // OK, these are now floating-point operations

答案 1 :(得分:2)

除了其他人指出的问题之外,在你将它乘以100.0之前,这个比例不会是百分比。

答案 2 :(得分:1)

int除以int将始终返回int。在划分之前,您必须将float中的两个参数中的一个作为:{/ p>

float a_percent = (float) a / total;
float b_percent = (float) b / total;

答案 3 :(得分:1)

我不是C专家,但我的猜测是因为将int除以int总是会产生一个int。

您可能需要执行以下操作:

float a_percent = (float)a/total;

float b_percent = (float)b/total;

答案 4 :(得分:1)

您首先执行整数除法,然后将结果转换为浮点数。这不会给出你想要的结果。在执行除法之前,要使total为浮点值(以便将类型自动提升为正确),或将ab转换为(float)

答案 5 :(得分:1)

这里使用整数数学而不是浮点数。 尝试:

float a_percent = a/(float)total;

float b_percent = b/(float)total;

答案 6 :(得分:0)

对于一个简单的百分比,你可能会更乐于使用定点。只需将你的分子(a或b)乘以100即可得到除法的百分比。外汇:

int a = 5;
int b = 10;

int total = a + b;

int a_percent = 100*a/total;  
int b_percent = 100*b/total;

printf("a%%=%d, b%%=d\n", a_percent, b_percent);