[英]Round to nearest multiple of a number
是否有一种惯用的方法可以四舍五入到数字的最接近倍数,而不是向上和向下四舍五入并查看哪个最接近?
假设只有整数:
number multiple result
12 5 10
13 5 15
149 10 150
添加倍数的一半,然后向下取整。
result = ((number + multiple/2) / multiple) * multiple;
或者
result = number + multiple/2;
result -= result % multiple;
如果数字正好在中间,则四舍五入。 如果您想要在这种情况下不同的行为,您可能需要调整计算。 此外,如果number
可能接近类型范围的顶部,请注意溢出。
易 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;
}
Mike Seymour的答案假设“数字”为正
我之前在将数字四舍五入到下一个最接近的 5 的倍数上回答了这个问题
使用cmath::abs
int rounded = n + abs((n % denom) - denom);
你可以改变denom
你想要的任何面值
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.