public static double getRandomMoney(RedPackage _redPackage) {
// remainSize 剩余的红包数量
// remainMoney 剩余的钱
if (_redPackage.remainSize == 1) {
_redPackage.remainSize--;
return (double) Math.round(_redPackage.remainMoney * 100) / 100;
}
Random r = new Random();
double min = 0.01; //
double max = _redPackage.remainMoney / _redPackage.remainSize * 2;
double money = r.nextDouble() * max;
money = money <= min ? 0.01: money;
money = Math.floor(money * 100) / 100;
_redPackage.remainSize--;
_redPackage.remainMoney -= money;
return money;
}
以上代码仅供参考,涉及商业计算要用java.math.BigDecimal.
再说结论:
1.先抢后抢拿到红包的大小的期望是大致相等的,所以还是先下手抢吧
2.后抢的人方差大(依赖前面人抢的多少),波动较大,有较大几率拿到“手气最佳”