50

私の命名法が正しいかどうかはわかりません!とにかく、これらは私が持っている整数です。たとえば、次のとおりです。

76
121
9660

そして、私はそれらを次のように四捨五入したいと思います。

100
100
9700

C# で高速化するにはどうすればよいですか? アルゴリズムについて考えていますが、C# にはいくつかのユーティリティがあるのではないでしょうか?

4

9 に答える 9

88

Math.Roundメソッドを試してください。方法は次のとおりです。

Math.Round(76d / 100d, 0) * 100;
Math.Round(121d / 100d, 0) * 100;
Math.Round(9660d / 100d, 0) * 100;
于 2012-10-31T08:24:38.057 に答える
26

少し前に、この種の丸めを一般化する簡単な拡張メソッドを書きました。

public static class MathExtensions
{
    public static int Round(this int i, int nearest)
    {
        if (nearest <= 0 || nearest % 10 != 0)
            throw new ArgumentOutOfRangeException("nearest", "Must round to a positive multiple of 10");

        return (i + 5 * nearest / 10) / nearest * nearest;
    }
}

整数除算を利用して、最も近い丸めを見つけます。

使用例:

int example = 152;
Console.WriteLine(example.Round(100)); // round to the nearest 100
Console.WriteLine(example.Round(10)); // round to the nearest 10

そしてあなたの例では:

Console.WriteLine(76.Round(100)); // 100
Console.WriteLine(121.Round(100)); // 100
Console.WriteLine(9660.Round(100)); // 9700
于 2012-10-31T08:18:26.600 に答える
22

次の表現を試してください。

(n + 50) / 100 * 100
于 2012-10-31T08:10:59.867 に答える
0
int num = 9660;
int remainder = num % 100;
Console.WriteLine(remainder < 50 ? num - remainder : num + (100 -remainder));

注: 私はこれを完全にテストしていません。

于 2012-10-31T08:20:51.533 に答える