2016-12-21 3 views
1

Ich habe eine while-Schleife verwendet, die nach Eingabe der Zahl 24 nicht funktioniert. Ich versuche, eine int-Zahl auf eine andere int-Zahl zu runden. Eg, möchte ich auf ein Vielfaches von 8.Rundung einer Int-Zahl zu einer anderen Int-Zahl

zB eine beliebige Zahl abzurunden: 1 bis 8, 13 bis 16, 23 bis 24

+0

Hallo und willkommen auf Paketüberfluss! Bitte zeigen Sie uns etwas mehr von Ihrem Code - der aktuelle Auszug reicht nicht aus, um das Problem zu finden. – Maurice

Antwort

5

Abrunden I die Quellennummer durch die Anzahl unterteilen würde es Runde (Vorsicht: werfen sie auf einen double, so dass Sie nicht verwenden integer-Division!) verwenden Math.ceil das Ergebnis abzurunden nach oben, und dann durch die gleiche Zahl multiplizieren zurück:

public static int roundToMultiple(int toRound, int roundBy) { 
    return roundBy * (int) Math.ceil((double)toRound/roundBy); 
} 
+0

Das ist falsch. Sie können Math.round nicht verwenden, roundToMultiple (1,8) wird 0 – Marcelo

+0

@Marcelo zurückgeben, was ist genau damit falsch? –

+0

Math.round rundet auf den nächsten int, also 1/8 wird auf 0 gerundet und dann 0 * 8 = 0. Sie müssen stattdessen Math.ceil verwenden – Marcelo

2

verwenden Sie den Modulo-Operator (%) , die den Rest zurückgibt, dann addiere die Subtraktion des Rests von 8 zu deiner Nummer.

public static void main(String[] args) { 
    int i = 13; 
    int rem = i % 8 > 0 ? i % 8 : 8; 

    i += 8 - rem; 

    System.out.println(i); 
} 

Ausgänge: 16

+0

Danke für die Hilfe. aber wenn ich die Zahl 8 eingib, wird es auf 16 gerundet. Wie kann ich es bekommen, so bleibt die Zahl 8 auf 8 und nicht auf 16 ??? – user7327674

+0

@ user7327674 ahh Ich habe vergessen zu überprüfen, ob 'i' bereits ein Vielfaches von 8 war. –

+0

irgendeine Idee, wie dieses Problem gelöst werden könnte ??? – user7327674

3

Wenn Sie die nächsten Vielfaches von 8 runden möchten, das ist nur ((i + 3)/8) * 8. (Das abrundet, wenn es 8n + 4 ist. Wenn Sie von einem halben aufrunden wollen, verwenden Sie i + 4 statt i + 3. Wenn Sie runden möchten „den ganzen Weg nach oben“, 9-16, i + 7 verwenden.)

+0

danke für Ihre Hilfe. was würde ich verwenden, wenn ich auf ein Vielfaches von 225 runden wollte – user7327674

+1

Im Allgemeinen ist es nur '((i + (n/2))/n) * n'. –

Verwandte Themen