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

新手上路,请多包涵

好的 - 我几乎很尴尬在这里发布这个(如果有人投票关闭,我会删除),因为这似乎是一个基本问题。

这是在 C++ 中四舍五入到一个数字的倍数的正确方法吗?

我知道还有其他与此相关的问题,但我特别想知道在 C++ 中执行此操作的最佳方法是什么:

 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);
}

更新:对不起,我可能没有明确意图。这里有些例子:

 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

原文由 Robben_Ford_Fan_boy 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 567
2 个回答

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

 int roundUp(int numToRound, int multiple)
{
    if (multiple == 0)
        return numToRound;

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

    return numToRound + multiple - remainder;
}

编辑:这是一个适用于负数的版本,如果“向上”是指始终 >= 输入的结果。

 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;
}

原文由 Mark Ransom 发布,翻译遵循 CC BY-SA 3.0 许可协议

无限可能,仅适用于有符号整数:

n + ((r - n) % r)

原文由 Hans Vandierendonck 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题