web-dev-qa-db-ja.com

整数を最も近い10の倍数に丸める

両方の方法で、価格を丸める方法を見つけようとしています。例えば:

Round down
43 becomes 40
143 becomes 140
1433 becomes 1430

Round up
43 becomes 50
143 becomes 150
1433 becomes 1440

次のような価格帯がある状況があります。

£143 - £193

そのうち私が見せたいのは:

£140 - £200

とてもきれいに見えるので

これを達成する方法についてのアイデアはありますか?

27
dhardy

いくつかのメソッドを作成するだけです。

int RoundUp(int toRound)
{
     if (toRound % 10 == 0) return toRound;
     return (10 - toRound % 10) + toRound;
}

int RoundDown(int toRound)
{
    return toRound - toRound % 10;
}

Modulusは、10 - rは、最も近い10分の1に移動し、rを減算するだけで切り捨てます。かなり簡単です。

59
evanmcdonnal

モジュラス(%)または浮動小数点を使用する必要はありません...

これは動作します:

public static int RoundUp(int value)
{
    return 10*((value + 9)/10);
}

public static int RoundDown(int value)
{
    return 10*(value/10);
}
15
Matthew Watson

このコードは、最も近い10の倍数に丸めます。

int RoundNum(int num)
{
     int rem = num % 10;
     return rem >= 5 ? (num - rem + 10) : (num - rem);
}

非常に簡単な使用法:

Console.WriteLine(RoundNum(143)); // prints 140
Console.WriteLine(RoundNum(193)); // prints 190
10
PaRiMaL RaJ

数値を別の数値の倍数に丸める一般的な方法、丸め ゼロから離れる

整数の場合

int RoundNum(int num, int step)
{
    if (num >= 0)
        return ((num + (step / 2)) / step) * step;
    else
        return ((num - (step / 2)) / step) * step;
}

floatの場合

float RoundNum(float num, float step)
{
    if (num >= 0)
        return floor((num + step / 2) / step) * step;
    else
        return ceil((num - step / 2) / step) * step;
}

一部の部品は直観に反しているように見えるか、あまり最適化されていないようです。 (num + step/2)intにキャストしようとしましたが、負のfloat((int) -12.0000 = -11 など)。とにかく、これらは私がテストしたいくつかのケースです:

  • ステップ1に丸められた数値はそれ自体でなければなりません
  • -3はステップ2に丸められます= -4
  • -2はステップ2に丸められます= -2
  • ステップ2に丸められた3 = 4
  • ステップ2に丸められた2 = 2
  • -2.3はステップ0.2 = -2.4に丸められます
  • -2.4をステップ0.2に丸める= -2.4
  • 2.3をステップ0.2に丸め= 2.4
  • 2.4はステップ0.2 = 2.4に丸められます
4
Chris Maes

数値を10で割ります。

number = number / 10;
Math.Ceiling(number);//round up
Math.Round(number);//round down

次に、10を掛けます。

number = number * 10;
4
Sharun
public static int Round(int n)
        {
            // Smaller multiple 
            int a = (n / 10) * 10;

            // Larger multiple 
            int b = a + 10;

            // Return of closest of two 
            return (n - a > b - n) ? b : a;
        }
0
Liakat