gpt4 book ai didi

c - 在 C 中创建 round_up(float) 函数时出错

转载 作者:太空宇宙 更新时间:2023-11-04 00:50:05 34 4
gpt4 key购买 nike

我正在尝试编写一个将 float 转换为整数的 round_up 函数,但我获取小数位的方式似乎有错误( float 的余数 % 1)。如果 float 是4.4,我想把它转换成4;如果它是 4.5,我希望将它转换为 5。 错误消息:错误:二进制 % 的无效操作数(具有“float”和“int”)

int round_up(float x)
{
int remainder;
int ret_whole_num;

ret_whole_num = x/1;
remainder = x % 1.0; /* this causes errors */

if (remainder > 5)
return ret_whole_num += 1;

return ret_whole_num;
}

最佳答案

这样做:

int round_zero_digits(float x)
{
return x + 0.5;
}

或者更一般的:

#include <math.h> /* for pow()  */

...

float round_n_digits(float x, unsigned int n)
{
x *= pow(10., n);

x = (int) (x + 0.5);

while (n--)
{
x /=10.;
}

return x;
}

round_n_digits(x, 0) 等价于 round_zero_digits(x)

更新(不使用 math 库):

float round_n_digits(float x, unsigned int n)
{
unsigned int n_save = n;

while (n--)
{
x *= 10.;
}

x = (int) (x + 0.5);

while (n_save--)
{
x /= 10.;
}

return x;
}

Update^2(纯 C'ish 方式):

#define ROUND_ZERO_DIGITS(x) ((int) ((x) + 0.5))

float round_n_digits(float x, unsigned int n)
{
unsigned int n_save = n;

while (n--)
{
x *= 10.;
}

x = ROUND_ZERO_DIGITS(x);

while (n_save--)
{
x /= 10.;
}

return x;
}

ROUND_ZERO_DIGITS() 是函数 round_zero_digits() 的宏版本。

关于c - 在 C 中创建 round_up(float) 函数时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22120276/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com