C ++中的舍入数字错误 - 表达式必须具有整数或枚举类型

时间:2013-06-06 18:09:11

标签: c++ enums

我有一个功能,旨在将数字向下舍入到最接近的偶数。

double round(double d)
{
  floor(d + 0.5);
  if(d % 2 == 1)
  {
      d = d-1;
  }
  return d;
}

但是,当我尝试编译代码时,这会返回错误“表达式必须具有整数或枚举类型”。从if语句的同一行报告错误。

有人能指出我正确的方向吗?

5 个答案:

答案 0 :(得分:4)

%运算符仅为整数定义。你想使用fmod() function

Bill is right关于round(double x)的正确实施。

答案 1 :(得分:2)

floor()函数返回一个double:

double floor (double x);

是浮点类型,而不是“整数类型”,如intchar。而不是调用floor(d + 0.5);轮次d并丢弃结果,你需要类似的东西:

int i = static_cast<int>(floor(d + 0.5));

答案 2 :(得分:0)

return floor(d/2 + 0.5) * 2;

当然,双打是近似值。对于10 ^ 50,你可能不会得到偶数。

答案 3 :(得分:0)

楼层不起作用,它返回楼层值。此外,%也适用于整数,因此您无法重复使用d。你想要的是:

  int i = floor(d + 0.5);
  if(i % 2 == 1)
  {
      i = i-1;
  }
  return i;

答案 4 :(得分:0)

此版本将按您的要求执行,返回int

如果参数d超出int的范围,则会返回0
(也许你想抛出一个OutOfRange例外)

int roundDown2Even(double d)
{
    return (INT_MIN <= d && d <= INT_MAX)? ((int)d) & ~1 : 0;
}