提问人:Luchian Grigore 提问时间:4/10/2015 更新时间:3/25/2022 访问量:37373
四舍五入到最接近的数字的倍数
Round to nearest multiple of a number
问:
有没有一种惯用的方法可以四舍五入到一个数字的最接近的倍数,而不是向上和向下四舍五入,看看哪一个最接近?
假设只有整数:
number multiple result
12 5 10
13 5 15
149 10 150
答:
41赞
Mike Seymour
4/10/2015
#1
将倍数的一半相加,然后向下舍入。
result = ((number + multiple/2) / multiple) * multiple;
或
result = number + multiple/2;
result -= result % multiple;
如果数字正好在中间,则四舍五入。在这种情况下,如果您想要不同的行为,则可能需要调整计算。此外,如果溢出可能接近类型范围的顶部,则要小心。number
评论
0赞
michalmonday
10/14/2020
嗨,我认为值得注意的是,它可能无法正常工作。我使用了这样的解决方法:我想知道是否有更好的方法可以做到这一点。result = abs(number) + multiple/2; result -= result % multiple; result *= number > 0 ? 1 : -1;
-2赞
Muhamad Iqbal
2/18/2020
#2
我之前在将数字四舍五入到下一个最接近的 5 倍数时回答过这个问题
使用时cmath::abs
int rounded = n + abs((n % denom) - denom);
您可以随心所欲地更改任何面额denom
0赞
siddhartha agarwal
3/25/2022
#3
简单的 Java 解决方案:
public Long roundToNearestLong(Long number, Long multiple) {
if (number == null)
return 0L;
Long smallerMultiple = (number / multiple) * multiple;
Long largerMultiple = smallerMultiple + multiple;
// Return of closest of two
return (number - smallerMultiple >= largerMultiple - number) ? largerMultiple : smallerMultiple;
}
上一个:为什么以及何时使用__noop?
下一个:在 C++ 中调用私有方法
评论
multiple/2
ceil(multiple/2)
multiple/2