2016-12-21 4 views
1
while(potatosconeflour <= c1) { 
    potatosconeflour = potatosconeflour + potatosconeflour; 
} 

Я использовал цикл while, который не работает после ввода номера 24. Я пытаюсь округлить номер int до другого номера int. Например, я хочу, чтобы закруглить любое число до кратного 8.Округление номера int на другой int number

Eg: округление 1 до 8, 13 до 16, от 23 до 24

+0

Здравствуйте и добро пожаловать переполнение стека! Пожалуйста, покажите нам еще несколько ваших кодов - текущей выдержки недостаточно, чтобы найти проблему. – Maurice

ответ

5

Я бы разделить номер источника на число округлить его (осторожно: приводите его к double, так что вы не используете целочисленное деление!) использовать Math.ceil округлить результат вверх, а затем умножить его обратно на тот же номер:

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

Это неправильно. Вы не можете использовать Math.round, roundToMultiple (1,8) вернет 0 – Marcelo

+0

@Marcelo, что с этим не так? –

+0

Круговые раунды от Math.round до ближайшего int, поэтому 1/8 округляется до 0, а затем 0 * 8 = 0. Вместо этого вы должны использовать Math.ceil – Marcelo

2

используйте оператор по модулю (%) , который возвращает остаток, затем добавьте вычитание остатка от 8 к вашему номеру.

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

    i += 8 - rem; 

    System.out.println(i); 
} 

Выходы: 16

+0

Спасибо за помощь. однако, если я ввожу число 8, оно округляется до 16. Как я могу получить его, чтобы число 8 оставалось на 8, а не округло до 16 ??? – user7327674

+0

@ user7327674 ahh Я забыл проверить, было ли 'i' уже кратным 8. –

+0

любая идея, как эта проблема могла быть решена ??? – user7327674

3

Если вы хотите, чтобы округлить до ближайшего кратен 8, это просто ((i + 3)/8) * 8. (Это округление вниз, если это 8n + 4. Если вы хотите, чтобы округлить от половины, используйте i + 4 вместо i + 3. Если вы хотите, чтобы закруглить «вплоть до» 9 в 16, используйте i + 7.)

+0

благодарит за вашу помощь. что бы я использовал, если бы захотел округлить до кратного 225 – user7327674

+1

В общем, это просто '((i + (n/2))/n) * n'. –