Как я могу округлить до целого числа из массива int? - PullRequest
0 голосов
/ 23 декабря 2011

Я разрабатываю плагин для пожертвований на Java, из которого пользователь может пожертвовать произвольную сумму. От пожертвования есть преимущества, которые вы получаете от определенных пакетов.

Что я хочу сделать, это округлить целое число n до ближайшего пакета пожертвований.

Например, может быть 3 пакета пожертвований, представленных целыми числами. Существуют пакеты пожертвований на сумму 5, 10 и 20 долларов. Если пользователь жертвует 13 долларов, я хочу, чтобы плагин округлил его до 10 долларов, так как это ближайший пакет пожертвований.

Ответы [ 5 ]

5 голосов
/ 23 декабря 2011

Ну, у меня сегодня немного свободного времени. (: Забота о массиве пожертвований увеличивается в порядке, иначе просто сначала отсортируйте его

public class Donation {
    private static int[] donArray = {10, 5, 30, 20};
    static{
        Arrays.sort(donArray);
    }

    public static void main(String[] args){
        int paid = 13;
        System.out.println("Applied Donation: " + applyDonation(paid));
    }

    private static int applyDonation(int paid) {
        int applied = 0;
        for(int range: donArray){
            if(range <= paid)
                applied = range;
            else
                break;
        }
        return applied;
    }
}

или даже проще:

    TreeSet<Integer> donSet = new TreeSet<Integer>(Arrays.asList(new Integer[]{10, 5, 30, 20}));
    int paid = 13;
    System.out.println("Applied Donation: " + donSet.floor(paid));
1 голос
/ 23 декабря 2011

Поместите все значения в TreeSet<Integer>, затем используйте

myTreeSet.headSet( donatedValue ).last();
0 голосов
/ 23 декабря 2011

Попробуйте разделить его на 10, округлить до ближайшего целого числа, а затем снова умножить на 10.

например.

13/10=1.3 -> 1.3~1 -> 1*10 = 10$

или

16/10=1.6 -> 1.6~2 -> 2*10=20$

Конечно, это будет работать только в пакетах пожертвований от 10 с.

0 голосов
/ 23 декабря 2011

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

0 голосов
/ 23 декабря 2011

Я не уверен, почему не это?

if(donation >10 && <=15) {           //say you want to round 15 or less to 10
  donation=10;
 }
...