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

时间:2014-03-01 20:59:18

标签: c function rounding

我正在尝试编写一个将浮点数转换为整数的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;
}

2 个答案:

答案 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;
}