2010-12-21 4 views

答えて

5

内蔵の何もない、あなただけのロジックを自分でコーディングする必要があるとしています。そのような方法があります。 (ダウン行くことは明確ですが、上がっていくことは管理可能である。)負の数のため

int number = 363; 
int roundedDown = number - number % 5; 
int roundedUp = number + (number % 5 > 0 ? (5 - number % 5) : 0); 

編集は、ロジックは、ほぼ逆転します。ここで

static int RoundUpToFive(int number) 
{ 
    if (number >= 0) 
     return number + (number % 5 > 0 ? (5 - number % 5) : 0); 
    else 
     return number - (number % 5); 
} 

static int RoundDownToFive(int number) 
{ 
    if (number >= 0) 
     return number - number % 5; 
    else 
     return number + (number % 5 < 0 ? (-5 - number % 5) : 0); 
} 
+0

@ Aniは、ネガをチェックしなかった。水は少し泥だ。 –

+1

+1ニースは、浮動小数点の土地に完全に入るドッジです。 – Ani

8

これはハックですが、それは動作します:

var rounded = Math.Round(363/5f) * 5; 
+0

私は泣いています。しかし、私は単にwhfが5fであることを知っていますか? – william

+2

5を浮動小数点値として指定します。 '(float)5'と同じ意味です。浮動小数点値を使用して除算する必要があります。そうでない場合、結果は整数として切り捨てられ、その後は常に切り捨てられます。 – cdhowie

+1

OPが(おそらく) 'int'を探していたとき、これは' double'と評価されることに注意してください。 –

0

は2つのアイデアの組み合わせである、私は通常、何をすべきかです:

static int RoundDown(int x, int n) { 
    return x/n * n; 
} 

static int Round(int x, int n) { 
    return (x + n/2)/n * n; 
} 

static int RoundUp(int x, int n) { 
    return (x + n - 1)/n * n; 
} 

(それは正の数を想定し、ネガにそれを拡張する単純明快である。)

[編集]

LLVMによれば、ラウンド関数は次のように書くこともできます。

int Round(int x, int n) { 
    int z = (x + n/2); 
    return z - (z % n); 
} 

あなたはよりエレガントなかもしれません。

関連する問題