13

数値を別の最も近い倍数に丸めることができる方法を探しています。これは同様の量子化です。

例えば。81 を最も近い 20 の倍数に丸めたい場合は、100 を返す必要があります。

これに使用できる .NET フレームワークのメソッド組み込みメソッドはありますか?

組み込みメソッドを求めている理由は、既に最適化されている可能性が高いからです。

4

4 に答える 4

12

はい、整数演算です。

m を次の n の倍数に切り上げるには、((m+n-1)/n)*n を使用します。

于 2008-12-19T13:21:55.227 に答える
8
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
*/
于 2008-12-19T13:22:38.283 に答える
5

リーの答えは良いですが、次のようにする必要があります。

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

Nからへの変化に注意してくださいM。モジュロ演算は(m)、数値ではなく乗数で行う必要があります(n)

于 2011-07-28T12:04:44.003 に答える
1

比較的遅いプラットフォームでこれらの多くを使用している場合は、次のバリアントを使用して乗算を排除できます。

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

もちろん、倍数を 2^n の値に制限できる場合は、モジュラス演算も論理的に同等のもの (通常は「&」) を優先して廃止される可能性があります。

ちなみに、上記の "RoundUp" 関数には重大な欠陥があり、{(m % n) == (n - 1)} の場合にのみ正しく切り捨てられます。切り捨ては整数除算に対して暗黙的に行われるため、補正は必要ありません。

于 2009-01-26T00:47:10.883 に答える