如果赋值为整数,则pow()的返回值会向下舍入

Ven*_*nom 6 c pow

pow在C中使用函数并将返回值存储为整数类型.请参阅下面的代码段:

for (i = 0; i < 5; i++){
    val = (int)pow(5, i);
    printf("%d, ", val);
}
Run Code Online (Sandbox Code Playgroud)

这里i,val是整数,输出是1, 5, 24, 124, 624.我相信这是因为浮点数25被视为24.99999 ...在分配给整数时会向下舍入到24.

如果我仍然需要将返回值存储在int中,我怎么能通过这个?

Mar*_*tos 9

0.5在施法前添加int.如果您的系统支持它,您可以调用C99 round()函数,但出于可移植性的原因,我更愿意避免使用它.

  • 有一点点差别,'round`从零开始,然后加上0.5并且转换为`int`.所以例如`round(pow(-0.5,1))`是-1,而`(int)(pow(-0.5,1)+ 0.5)`是0.所以提问者可能需要决定他们想要什么,尽管当然,如果答案接近整数,则没有区别. (3认同)

And*_*rsK 6

更换

val = (int)pow(5, i);
Run Code Online (Sandbox Code Playgroud)

double d = pow(5,i);
val = (int)((d > 0.0) ? floor(d + 0.5) : ceil(d - 0.5));
Run Code Online (Sandbox Code Playgroud)