首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >向上舍入到数字的最接近的倍数

向上舍入到数字的最接近的倍数
EN

Stack Overflow用户
提问于 2010-08-04 23:19:23
回答 26查看 153.4K关注 0票数 190

OK -我几乎很尴尬地在这里张贴这篇文章(如果有人投票关闭,我将删除),因为这似乎是一个基本的问题。

在C++中,这是向上舍入到数字的倍数的正确方法吗?

我知道还有其他与此相关的问题,但我特别感兴趣的是,在C++中做这件事的最佳方法是什么:

代码语言:javascript
复制
int roundUp(int numToRound, int multiple)
{
 if(multiple == 0)
 {
  return numToRound;
 }

 int roundDown = ( (int) (numToRound) / multiple) * multiple;
 int roundUp = roundDown + multiple; 
 int roundCalc = roundUp;
 return (roundCalc);
}

更新:对不起,我可能没有说清楚我的意图。下面是一些示例:

代码语言:javascript
复制
roundUp(7, 100)
//return 100

roundUp(117, 100)
//return 200

roundUp(477, 100)
//return 500

roundUp(1077, 100)
//return 1100

roundUp(52, 20)
//return 60

roundUp(74, 30)
//return 90
EN

回答 26

Stack Overflow用户

回答已采纳

发布于 2010-08-04 23:44:00

这适用于正数,但不确定负数。它只使用整数运算。

代码语言:javascript
复制
int roundUp(int numToRound, int multiple)
{
    if (multiple == 0)
        return numToRound;

    int remainder = numToRound % multiple;
    if (remainder == 0)
        return numToRound;

    return numToRound + multiple - remainder;
}

编辑:这里有一个可以处理负数的版本,如果你说的“向上”是指一个总是>=输入的结果。

代码语言:javascript
复制
int roundUp(int numToRound, int multiple)
{
    if (multiple == 0)
        return numToRound;

    int remainder = abs(numToRound) % multiple;
    if (remainder == 0)
        return numToRound;

    if (numToRound < 0)
        return -(abs(numToRound) - remainder);
    else
        return numToRound + multiple - remainder;
}
票数 181
EN

Stack Overflow用户

发布于 2010-11-02 06:41:27

当因子始终为正时,这是有效的:

代码语言:javascript
复制
int round_up(int num, int factor)
{
    return num + factor - 1 - (num + factor - 1) % factor;
}

Edit:这将返回round_up(0,100)=100。有关返回round_up(0,100)=0的解决方案,请参阅下面的Paul注释。

票数 44
EN

Stack Overflow用户

发布于 2010-08-04 23:30:40

这是“我如何找出n比特将占用多少字节?”(A:(n比特+ 7) / 8)的问题的推广。

代码语言:javascript
复制
int RoundUp(int n, int roundTo)
{
    // fails on negative?  What does that mean?
    if (roundTo == 0) return 0;
    return ((n + roundTo - 1) / roundTo) * roundTo; // edit - fixed error
}
票数 26
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3407012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档