【发布时间】:2011-03-25 08:02:49
【问题描述】:
好的 - 我几乎不好意思在这里发布这个(如果有人投票关闭,我会删除),因为这似乎是一个基本问题。
这是在 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
【问题讨论】:
-
您的逻辑有误 - 假设我想将 4 舍入到最接近的 2 倍数。roundDown = (4/2) * 2 = 4;向上取整 = 4 + 2;所以 roundCalc = 6。我假设在这种情况下你会想要返回 4。
-
这不适用于roundUp(30,30)。它给出 60 作为答案,它仍然应该给出 30 作为答案..
-
@bsobaid:在底部查看我的答案。它比这里的其他解决方案稍微简单一些,尽管它们也应该可以工作
-
您的测试用例明显缺少涉及负数的示例、除法准确的情况、除法几乎准确的情况以及数字非常接近@987654323 范围限制的情况@.
-
Robben_Ford_Fan_boy,应删除带有您所寻求答案的编辑。如果它与给出的答案不同,您可以发布自己的答案。就目前而言,该答案存在应在答案部分解决的问题。