Округление до крат 5 - PullRequest
0 голосов
/ 06 июня 2018

Я бы хотел сделать мою программу еще более точной и учесть, что нет монет для 1,2,7 значений (только 5,10,20,50,100 ..), поэтому существует правило, называемоеокругление до пяти форинтов.

Пример:

111,112  -> 110 
113,114  -> 115
116,117  -> 115
118,119  -> 120

Мой вопрос: какую функцию я должен использовать в JAVA, чтобы достичь своей цели и получить правильное округленное значение?

Ответы [ 4 ]

0 голосов
/ 22 июня 2018

Я не понимаю, почему это не было упомянуто, но, кажется, следующее должно хорошо работать:

5 * (Math.round(n / 5))
0 голосов
/ 06 июня 2018

Скажите, a - ваше целое число или число с плавающей точкой, которое вы хотите округлить :

int round = Math.round( ((float)(a)/5) * 5);

Если вы объявите как число с плавающей точкой, вы можете пропустить приведение типа.

0 голосов
/ 06 июня 2018

Вы можете использовать следующий метод.

public static int roundTo5(int n) {
        int t = n % 10; // get modulo 10 of n
        switch (t) {
        case 0:
        case 1:
        case 2:
            // result will be n - n%10;
            return n - t;
        case 3:
        case 4:
        case 5:
        case 6:
        case 7:
            // result will be n - n %10 + 5
            return n - t + 5;
        case 8:
        case 9:
            // result will be n - n%10 + 10;
            return n - t + 10;
        }
        return 0;
}
0 голосов
/ 06 июня 2018

Вы могли бы написать это так:

int roundTo5(int value)
{
    return ((value + 2) / 5) * 5;
}

Это принимает любое значение форинта, добавляет 2 и делит на 5. Это делает "округление до пола" целых чисел и снова умножает 5.

0 → 2 → 0 → 0
1 → 3 → 0 → 0
2 → 4 → 0 → 0
3 → 5 → 1 → 5
4 → 6 → 1 → 5
5 → 7 → 1 → 5
6 → 8 → 1 → 5
7 → 9 → 1 → 5
8 → 10 → 2 → 10
9 → 11 → 2 → 10
...