关于C#:如果将pow()的返回值赋给整数,则将其四舍五入

return value of pow() gets rounded down if assigned to an integer

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

1
2
3
4
for (i = 0; i < 5; i++){
    val = (int)pow(5, i);
    printf("%d,", val);
}

这里ival是整数,输出是1, 5, 24, 124, 624
我相信这是因为浮点数25被视为24.99999 ...在分配给整数时会四舍五入为24。

如果仍然需要将返回值存储在int中,该如何传递呢?


在投射到int之前添加0.5。 如果您的系统支持它,则可以调用C99 round()函数,但是出于可移植性的原因,我宁愿避免使用它。


更换

1
val = (int)pow(5, i);

1
2
double d = pow(5,i);
val = (int)((d > 0.0) ? floor(d + 0.5) : ceil(d - 0.5));


自己实施战俘。

1
2
3
4
5
6
7
int myPow(int base, int exponent) {
    int n = 1;
    for (int i = 0; i < exponent; i++) {
        n *= base;
    }
    return n;
}

当然,这仅处理正指数,并且仅在整数上起作用,并且当然有更有效的方法可以做到这一点。 例如,参见Haskell中^的来源。


我自己有这个问题。 我在您的指令中轻松解决了它,只需添加if语句即可。

1
2
3
4
if (k%n>0)
{
    k=k+1;
}