我正在尝试编写一个将浮点数转换为整数的round_up函数,但是我的获取小数位数(浮点数%1的余数)似乎有误。如果浮点数是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;
}
答案 0 :(得分:5)
这样做:
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
lib):
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;
}
更新^ 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()
的宏观版本。
答案 1 :(得分:1)
试试这个:
int round_up(float x)
{
if ( (int) x == x ) return x;
else return x + 1;
}