利用BigDecimal中multiply乘法方法 一个基准范围*百分比
public static void main(String[] args) {
int mulriple = 10000;
List<LotteryItem> lotteryItems = new ArrayList<>();
LotteryItem lotteryItem1 = new LotteryItem();
lotteryItem1.setId(1);
lotteryItem1.setPercent(new BigDecimal(0.02));
lotteryItems.add(lotteryItem1);
LotteryItem lotteryItem2 = new LotteryItem();
lotteryItem2.setId(2);
lotteryItem2.setPercent(new BigDecimal(0.09));
lotteryItems.add(lotteryItem2);
LotteryItem lotteryItem3 = new LotteryItem();
lotteryItem3.setId(3);
lotteryItem3.setPercent(new BigDecimal(0.2));
lotteryItems.add(lotteryItem3);
LotteryItem lotteryItem4 = new LotteryItem();
lotteryItem4.setId(4);
lotteryItem4.setPercent(new BigDecimal(0.5));
lotteryItems.add(lotteryItem4);
int lastScope = 0;
Collections.shuffle(lotteryItems);
Map<Integer, int[]> awardItemScope = new HashMap<>();
for (LotteryItem item : lotteryItems) {
int currentScope = lastScope + new BigDecimal(item.getPercent().floatValue()).multiply(new BigDecimal(mulriple)).intValue();
awardItemScope.put(item.getId(), new int[]{lastScope + 1, currentScope});
lastScope = currentScope;
}
System.out.println(awardItemScope.toString());
int luckyNumber = new Random().nextInt(lastScope);
int luckyPrizeId = 0;
if (!awardItemScope.isEmpty()) {
Set<Map.Entry<Integer, int[]>> set = awardItemScope.entrySet();
for (Map.Entry<Integer, int[]> entry : set) {
if (luckyNumber >= entry.getValue()[0] && luckyNumber <= entry.getValue()[1]) {
luckyPrizeId = entry.getKey();
break;
}
}
}
System.out.println(luckyPrizeId);
}
其中,实体类:
public class LotteryItem {
private Integer id;
private BigDecimal percent;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public BigDecimal getPercent() {
return percent;
}
public void setPercent(BigDecimal percent) {
this.percent = percent;
}
}