繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM