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

Luc*_*ore 14 c++ math

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

假设只有整数:

number   multiple   result
12       5          10
13       5          15
149      10         150
Run Code Online (Sandbox Code Playgroud)

Mik*_*our 26

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

result = ((number + multiple/2) / multiple) * multiple;
Run Code Online (Sandbox Code Playgroud)

要么

result = number + multiple/2;
result -= result % multiple;
Run Code Online (Sandbox Code Playgroud)

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