.NET方法将数字四舍五入到另一个数字的最接近的倍数?

时间:2008-12-19 13:17:36

标签: .net rounding

我正在寻找一种方法,可以将向上的数字四舍五入到另一个的最接近的倍数。这类似于量化。

EG。如果我想将81舍入到最接近的20的倍数,它应该返回100。

我可以在.NET框架中使用方法内置方法吗?

我要求内置方法的原因是因为它很可能已经被优化了。

4 个答案:

答案 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));

请注意从NM的更改。模运算应使用乘数(m)而不是数字(n)

答案 3 :(得分:1)

如果您在相对较慢的平台上使用了大量这些,可以使用以下变量来消除乘法:

t = m + n - 1; return(t - (t%n));

当然,如果你可以将你的倍数限制为2 ^ n的值,那么也可以弃用模数运算以支持其逻辑等价物(通常是“&”)。

顺便提一下,上面说明的“RoundUp”功能存在严重缺陷,只有在{(m%n)==(n - 1)}时才会正确舍入。对于整数除法,舍入是隐含的,因此不需要补偿。