有人问过微信的人,大致是这样:
先上代码:
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. 感谢
再说结论:
- 先抢后抢拿到红包的大小的期望是大致相等的,所以还是先下手抢吧
- 后抢的人方差大(依赖前面人抢的多少),波动较大,有较大几率拿到“手气最佳”
祝大家抢红包快乐哦~
测试数据。