我有一个功能,旨在将数字向下舍入到最接近的偶数。
double round(double d)
{
floor(d + 0.5);
if(d % 2 == 1)
{
d = d-1;
}
return d;
}
但是,当我尝试编译代码时,这会返回错误“表达式必须具有整数或枚举类型”。从if语句的同一行报告错误。
有人能指出我正确的方向吗?
答案 0 :(得分:4)
%运算符仅为整数定义。你想使用fmod() function。
Bill is right关于round(double x)
的正确实施。
答案 1 :(得分:2)
floor()
函数返回一个double:
double floor (double x);
是浮点类型,而不是“整数类型”,如int
或char
。而不是调用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;
}