Округлить последнюю цифру целых чисел - PullRequest
0 голосов
/ 08 сентября 2018

Я должен ввести число и округлить последнюю цифру до 0 или 5.

  1. От 0,1,2 до 0, например 12 -> 10
  2. От 3,4,5,6,7 до 5, как 37 -> 35
  3. И от 8,9,0 до 0, снова как 59 -> 60

Я пытался Math.ceil или Math.floor, но они не работают.

Ответы [ 6 ]

0 голосов
/ 08 сентября 2018

На самом деле это округление до ближайшего 5-кратного. Округление до половины.

n == 5f + r      where f, r < 5, f, r ints >= 0
  f = n / 5
  r = n % 5

r == 0, 1, 2 round down, rest round up

С этим вы сможете создать решение.

0 голосов
/ 08 сентября 2018

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

((n + 2) / 5) * 5;

Нет необходимости в сложной логике.

Более обобщенно, округлить int n до кратного int m

((n + (m/2)) / m) * m;

Если вы хотите работать и с отрицательными числами, оно становится:

((n + (n >= 0 ? 2 : -2)) / 5) * 5;

((n + (n >= 0 ? (m/2) : -(m/2)) / m) * m;
0 голосов
/ 08 сентября 2018

Нет встроенного метода для достижения этой цели. Вы должны кодировать это самостоятельно.

Подход может состоять в том, чтобы вычислить мод 10 и добавить разницу:

int customRound(int n){
    int diff, mod = n % 10;

    if(mod < 3) diff = 0;
    else if(mod < 8) diff = 5;
    else diff = 10;

    return n - mod + diff;
}
0 голосов
/ 08 сентября 2018

Math.ceil / Math.floor округляет числа с плавающей запятой до ближайшего целого числа. Они просто не могут делать то, что вы хотите, то есть найти ближайший кратный для целого числа.

Существуют различные подходы для решения этой проблемы. Это домашнее задание, я полагаю? Суть не в том, чтобы найти вызов библиотеки, чтобы сделать это как однострочный (это помогает, я уверен, что такого вызова библиотеки не существует из коробки), смысл в том, чтобы написать некоторый базовый код для этого.

Вот один из способов:

Вы можете получить последнюю цифру с помощью x % 10 (то есть x по модулю 10. Обратите внимание, что -15 % 10 - это -5, а не 5), а затем использовать конструкцию switch или несколько if / else if операторы для правильных действий на основе последней цифры.

или более хитрым способом:

Когда вы делите на 2 целых числа в java, результат всегда округляется до целого числа, просто обрезая биты после запятой (поэтому для положительных чисел он округляется в меньшую сторону). Один из способов получить число, последняя цифра которого всегда равна 0 или 5, - это разделить на 5 и снова умножить на 5. Но вам нужно выработать стратегию, чтобы, скажем, 13 стало 15, а не 10, так что вам придется что-то добавить, прежде чем вы начнете делить и умножать на 5. Я оставлю это как упражнение для вас, чтобы понять, как это сделать и что добавить.

0 голосов
/ 08 сентября 2018

Вот простая функция, которая округляет до любого значения, которое вы хотите, оно принимает два аргумента, один из которых является числом для округления. Другой - это (в вашем случае это 5) точность округления.

public static double roundTo(double toRound, double precision){
    double holder = toRound/precision;
    int result = (int) Math.round(holder);
    return result*precision;
}
0 голосов
/ 08 сентября 2018

Math.ceil и Math.floor предназначены для чисел с плавающей запятой (например, Double с).Там нет встроенной функции для того, что вы хотите сделать, но это должно работать

public static int round(int original) {
    if original % 10 <= 2 {
        return original - (original % 10)
    } else if original % 10 <= 7 {
        return original - (original % 10) + 5
    }
    return original - (original % 10) + 10
}

Если вы хотите, чтобы это работало с отрицательными числами, используйте это:

public static int round(int original) {
    if original % 10 <= 2 {
        return original - (original % 10)
    } else if original % 10 <= 7 {
        return original - (original % 10) + 5
    } else if original % 10 <= 9 {
        return original - (original % 10) + 10
    } else if original % 10 >= -2 {
        return original - (original % 10)
    } else if original % 10 >= -7 {
        return original - (original % 10) - 5
    }
    return original - (original % 10) - 10
}

Понятно,Вы не можете просто скопировать и вставить этот код, потому что вам нужно поместить его в класс и, возможно, изменить видимость и static ness (public static) часть.

Чтобы использовать его,звоните int rounded = round(input)

Надеюсь, это поможет!

...