"将数值四舍五入至最接近某个数字的倍数"
"将数值四舍五入至最接近某个数字的倍数"
好的-我几乎感到尴尬在这里发布这个问题(如果有人投票关闭,我将删除),因为它似乎是一个基本问题。
这是将一个数舍入为另一个数的倍数的正确方法吗?
我知道有其他相关的问题,但我特别想知道在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
admin 更改状态以发布 2023年5月25日
没有条件:
int roundUp(int numToRound, int multiple) { assert(multiple); return ((numToRound + multiple - 1) / multiple) * multiple; }
对于负数,类似于远离零的四舍五入
适用于负数的版本:
int roundUp(int numToRound, int multiple) { assert(multiple); int isPositive = (int)(numToRound >= 0); return ((numToRound + isPositive * (multiple - 1)) / multiple) * multiple; }
如果multiple
是2的幂(速度可以提高约3.7倍)
int roundUp(int numToRound, int multiple) { assert(multiple && ((multiple & (multiple - 1)) == 0)); return (numToRound + multiple - 1) & -multiple; }
这适用于正数,不确定负数是否适用。它只使用整数运算。
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; }