抽奖概率

/**
* 通过奖品列表中的概率抽取奖品
*
* @param list
* @return
*/
private GiftPackageRule getPrize(List<GiftPackageRule> list) {
if (list == null || list.size() < 1) return null;

// 先计算所有中奖率的总和
double total = 0.0;
for (GiftPackageRule dpr : list) {
total += dpr.getProbability();
}

//如果概率小于100的话,增加一个不中奖的概率,去掉这行代码就是100%中奖
if (total < 100) {
GiftPackageRule giftPackageRule = new GiftPackageRule();
giftPackageRule.setProbability((int) (100 - total));
list.add(giftPackageRule);
}

// 获取一个代表中奖的随机值
double bingo = Math.random() * total;

// 判断这个中奖值落在哪个奖品上
for (GiftPackageRule dpr : list) {
if (bingo < dpr.getProbability()) {
if (dpr.getGiftPackId() == null) {
return null;
} else {
return dpr;
}
} else {
bingo -= dpr.getProbability();
}
}
return null;
}
原文地址:https://www.cnblogs.com/tinya/p/10001858.html