我要求用户在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);
答案 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
为浮点值(以便将类型自动提升为正确),或将a
和b
转换为(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);