我正在设计一个Java捐赠插件,用户可以从中捐赠自定义金额。从捐赠中,您可以从某些包裹中获得好处。
我希望做的是将整数 n 四舍五入到最近的捐款套餐。
例如,可能有3个捐赠包,全部表示为整数。有5美元,10美元和20美元的捐赠套餐。如果用户捐赠13美元,我希望该插件将其降低到10美元,因为这是最近的捐赠套餐。
答案 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轻松决定这两个值。
编辑:您需要事先对数组进行排序。