仅当转换为浮点数时,数组的平均值才能正确显示

use*_*582 1 c floating-point casting

所以我有一个非常菜鸟的问题。虽然我将平均值声明为浮点数,但当我计算它时avg = sum / counter;(其中 counter 是数组中大于 0 的元素的数量),然后打印它,我只得到小数点后的 0。

但是,如果我通过转换为浮点数来计算它,avg = (float) sum/counter;则平均值会正确打印出来。

第一个不应该是正确的吗?如果我将变量声明为浮点型,为什么稍后要再次将其转换为浮点型?

And*_*ter 5

当你声明

int sum;
int counter;
...
Run Code Online (Sandbox Code Playgroud)

然后sum / counter执行整数除法,得到一个整数值。您仍然可以将该结果分配给float变量,但该值将仅保留整数部分。

要解决这个问题,您需要将sum或转换counterfloat- 只有这样您才能获得float结果:

float result = (float) sum / counter;
Run Code Online (Sandbox Code Playgroud)

顺便说一句,这与 - 意思相同((float) sum) / counter,您所写的强制转换适用于sum.