[英]Floating point in C
我向用户询问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);
您没有使用浮点数,而是使用了整数,因此整数除法给出了零( 然后将其分配给浮点数)。
要执行浮点运算,必须首先将整数(或其中至少一个)转换为浮点数。 方便地,我们只使用total
:
float total = a + b; // exact
float ap = a / total;
float bp = b / total; // OK, these are now floating-point operations
除了其他人指出的问题外,该比率直到您乘以100.0才算是百分比。
一个int
除以一个int
将始终返回一个int
。 在除法之前,必须使两个参数之一成为float
:
float a_percent = (float) a / total;
float b_percent = (float) b / total;
我不是C专家,但是我的猜测是因为将一个整数除以一个整数总是会得到一个整数。
您可能需要执行以下操作:
float a_percent = (float)a/total;
float b_percent = (float)b/total;
您首先要执行整数除法,然后将结果转换为浮点数。 这不会给出您想要的结果。 在执行除法之前,要么使total
浮点值开始(以便类型自动升为正确),要么将a
和b
为(float)
。
您在此处使用的是整数数学而不是浮点数。 尝试:
float a_percent = a/(float)total;
float b_percent = b/(float)total;
对于一个简单的百分比,您可能会更喜欢使用定点。 只需将分子(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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.