舍入到最接近的数字的倍数

时间:2015-04-10 09:06:53

标签: c++ math

是否有惯用的方法来舍入到数字的最近倍数,而不是向上和向下舍入并查看哪一个最接近?

仅假设整数:

number   multiple   result
12       5          10
13       5          15
149      10         150

2 个答案:

答案 0 :(得分:22)

添加一半的倍数,然后向下舍入。

result = ((number + multiple/2) / multiple) * multiple;

result = number + multiple/2;
result -= result % multiple;

如果数字恰好位于中间,则会进行汇总。如果在这种情况下需要不同的行为,则可能需要调整计算。另外,如果number可能位于类型范围的顶部附近,请注意溢出。

答案 1 :(得分:-1)

我之前在Rounding off a number to the next nearest multiple of 5上回答过

使用cmath::abs

int rounded = n + abs((n % denom) - denom);

您可以用所需的任何面额更改denom