2010-12-21 11 views

Antwort

5

Es gibt nichts eingebaut, du wirst nur sich selbst die Logik zu codieren haben. Hier ist eine solche Methode. (Going down ist klarer, aber steigen ist überschaubar.)

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

bearbeiten für negative Zahlen, die Logik fast umgekehrt wird.

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, hat nicht nach Negativen gesucht. Wird das Wasser etwas trüben. –

+1

+1 Schön, weicht in Floating-Point Land vollständig. – Ani

8

Dies ist ein Hack, aber es funktioniert:

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

Ich bin sry. Aber ich weiß einfach, dass es 5f ist? – william

+2

Es gibt 5 als Float-Wert an. Es hat dieselbe Bedeutung wie '(float) 5'. Sie müssen die Division mit einem Gleitkommawert durchführen oder das Ergebnis wird als Integer abgeschnitten und anschließend immer abgerundet. – cdhowie

+1

Beachten Sie, dass dies zu einem "double" ausgewertet wird, wenn das OP (wahrscheinlich) nach einem "int" gesucht hat. –

0

Hier ist, was ich in der Regel tun, das eine Kombination der beiden Ideen ist: (. Das setzt voraus, positive Zahlen, es zu Negativer Erweiterung ist straight-forward)

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; 
} 

[ bearbeiten]

nach LLVM, die Round-Funktion auch wie folgt geschrieben werden kann:

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

Was Sie eleganter finden können.

Verwandte Themen