繁体   English   中英

C中的浮点

[英]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浮点值开始(以便类型自动升为正确),要么将ab(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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM