如何向下舍入到int数组中最接近的整数?

时间:2011-12-23 06:24:32

标签: java arrays math integer rounding

我正在设计一个Java捐赠插件,用户可以从中捐赠自定义金额。从捐赠中,您可以从某些包裹中获得好处。

我希望做的是将整数 n 四舍五入到最近的捐款套餐。

例如,可能有3个捐赠包,全部表示为整数。有5美元,10美元和20美元的捐赠套餐。如果用户捐赠13美元,我希望该插件将其降低到10美元,因为这是最近的捐赠套餐。

5 个答案:

答案 0 :(得分:5)

好吧,我今天有空闲时间。 (:关心捐赠数组正在增加秩序..否则先排序

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 :(得分:1)

将所有值放在TreeSet<Integer>中,然后使用

myTreeSet.headSet( donatedValue ).last();

答案 2 :(得分:0)

我不知道为什么不呢?

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

答案 3 :(得分:0)

尝试将其除以10,将其四舍五入为最接近的整数,然后再将其乘以10。

例如

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

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

当然,这只适用于10s的捐赠套餐。

答案 4 :(得分:0)

您可以在捐赠数组上使用二元搜索,找到新捐赠值所在的索引,然后使用if-else轻松决定这两个值。
编辑:您需要事先对数组进行排序。