Округление числа до ближайшего кратного 5 - PullRequest
33 голосов
/ 16 февраля 2012

Кто-нибудь знает, как округлить число до ближайшего кратного 5? Я нашел алгоритм округления до ближайшего кратного 10, но не могу найти этот.

Это делает это в течение десяти.

double number = Math.round((len + 5)/ 10.0) * 10.0;

Ответы [ 19 ]

95 голосов
/ 16 февраля 2012

округлить до ближайшего любого значения

int round(double i, int v){
    return Math.round(i/v) * v;
}

Вы также можете заменить Math.round() на Math.floor() или Math.ceil(), чтобы сделать его всегда округленным или всегда округлым.

50 голосов
/ 16 февраля 2012
int roundUp(int n) {
    return (n + 4) / 5 * 5;
}

Примечание - ответ YankeeWhiskey округляется до ближайшего кратного, это округляется в большую сторону. Нужна модификация, если она нужна для работы с отрицательными числами. Обратите внимание, что целочисленное деление, за которым следует целочисленное умножение того же числа, является способом округления вниз.

11 голосов
/ 16 февраля 2012

Я думаю, что у меня есть, благодаря Амиру

double round( double num, int multipleOf) {
  return Math.floor((num + multipleOf/2) / multipleOf) * multipleOf;
}

Вот код, который я запустил

class Round {
    public static void main(String[] args){
        System.out.println("3.5 round to 5: " + Round.round(3.5, 5));
        System.out.println("12 round to 6: " + Round.round(12, 6));
        System.out.println("11 round to 7: "+ Round.round(11, 7));
        System.out.println("5 round to 2: " + Round.round(5, 2));
        System.out.println("6.2 round to 2: " + Round.round(6.2, 2));
    }

    public static double round(double num, int multipleOf) {
        return Math.floor((num +  (double)multipleOf / 2) / multipleOf) * multipleOf;
    }
}

А вот и вывод

3.5 round to 5: 5.0
12 round to 6: 12.0
11 round to 7: 14.0
5 round to 2: 6.0
6.2 round to 2: 6.0
9 голосов
/ 16 февраля 2012
int roundUp(int num) {
    return (int) (Math.ceil(num / 5d) * 5);
}
5 голосов
/ 16 февраля 2012
int roundUp(int num) {
    return ((num / 5) + (num % 5 > 0 ? 1 : 0)) * 5;
}
5 голосов
/ 16 февраля 2012
int round(int num) {
    int temp = num%5;
    if (temp<3)
         return num-temp;
    else
         return num+5-temp;
}
1 голос
/ 24 августа 2017

Я создал метод, который может преобразовать число в ближайшее, которое будет передано, может быть, это поможет кому-то, потому что я видел много способов здесь, и он не работал для меня, но этот сделал:

/**
 * The method is rounding a number per the number and the nearest that will be passed in.
 * If the nearest is 5 - (63->65) | 10 - (124->120).
 * @param num - The number to round
 * @param nearest - The nearest number to round to (If the nearest is 5 -> (0 - 2.49 will round down) || (2.5-4.99 will round up))
 * @return Double - The rounded number
 */
private Double round (double num, int nearest) {
    if (num % nearest >= nearest / 2) {
        num = num + ((num % nearest - nearest) * -1);
    } else if (num % nearest < nearest / 2) {
        num = num - (num % nearest);
    }
    return num;
}
1 голос
/ 11 мая 2016

Другой метод или логика для округления числа до ближайшего кратного 5

double num = 18.0;
    if (num % 5 == 0)
        System.out.println("No need to roundoff");
    else if (num % 5 < 2.5)
        num = num - num % 5;
    else
        num = num + (5 - num % 5);
    System.out.println("Rounding up to nearest 5------" + num);

вывод:

Rounding up to nearest 5------20.0
1 голос
/ 08 апреля 2016

Некоторые люди говорят что-то вроде

int n = [some number]
int rounded = (n + 5) / 5 * 5;

Это округляет, скажем, 5 до 10, а также 6, 7, 8 и 9 (все до 10). Вы не хотите от 5 до 10, хотя. Имея дело только с целыми числами, вы хотите вместо этого добавить 4 к n вместо 5. Поэтому возьмите этот код и замените 5 на 4:

int n = [some number]
int rounded = (n + 4) / 5 * 5;

Конечно, когда имеете дело с двойными числами, просто укажите что-то вроде 4.99999 или, если вы хотите учесть все случаи (если вы можете иметь дело с еще более точными двойными числами), добавьте оператор условия:

int n = [some number]
int rounded = n % 5 == 0 ? n : (n + 4) / 5 * 5;
1 голос
/ 22 декабря 2018
int getNextMultiple(int num , int multipleOf) {
    int nextDiff = multipleOf - (num % multipleOf);
    int total = num + nextDiff;
    return total;
}
...