是否有惯用的方法来舍入到数字的最近倍数,而不是向上和向下舍入并查看哪一个最接近?
仅假设整数:
number multiple result
12 5 10
13 5 15
149 10 150
答案 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