我正在寻找一种方法,可以将向上的数字四舍五入到另一个的最接近的倍数。这类似于量化。
EG。如果我想将81舍入到最接近的20的倍数,它应该返回100。
我可以在.NET框架中使用方法内置方法吗?
我要求内置方法的原因是因为它很可能已经被优化了。
答案 0 :(得分:11)
是,整数算术。
要将m舍入到n的下一个倍数,请使用((m + n-1)/ n)* n
答案 1 :(得分:7)
public static int RoundUp(int num, int multiple)
{
if (multiple == 0)
return 0;
int add = multiple / Math.Abs(multiple);
return ((num + multiple - add) / multiple)*multiple;
}
static void Main()
{
Console.WriteLine(RoundUp(5, -2));
Console.WriteLine(RoundUp(5, 2));
}
/* Output
* 4
* 6
*/
答案 2 :(得分:5)
t = m + n - 1; return (t - (t % m));
请注意从N
到M
的更改。模运算应使用乘数(m)
而不是数字(n)
。
答案 3 :(得分:1)
如果您在相对较慢的平台上使用了大量这些,可以使用以下变量来消除乘法:
t = m + n - 1; return(t - (t%n));
当然,如果你可以将你的倍数限制为2 ^ n的值,那么也可以弃用模数运算以支持其逻辑等价物(通常是“&”)。
顺便提一下,上面说明的“RoundUp”功能存在严重缺陷,只有在{(m%n)==(n - 1)}时才会正确舍入。对于整数除法,舍入是隐含的,因此不需要补偿。