最近看了一篇文章,讲微信红包随机算法的。感觉很不错,所以自己实现了下,并进行了简单测试。
算法
算法很简单,不是提前算好,而是抢红包时计算:
红包里的金额怎么算?为什么出现各个红包金额相差很大?
答:随机,额度在0.01和剩余平均值*2之间。
实现
实现上述算法的逻辑主要是:
public static double getRandomMoney(LeftMoneyPackage _leftMoneyPackage){
if (_leftMoneyPackage.peoples == 1) {
_leftMoneyPackage.peoples--;
return (double) Math.round(_leftMoneyPackage.leftMoney * 100) / 100;
}
Random r = new Random();
double min = 0.01;
double max = _leftMoneyPackage.leftMoney / _leftMoneyPackage.peoples * 2;
double money = r.nextDouble() * max;
money = money < min ? min : money;
money = (double) Math.floor(money * 100) / 100;
_leftMoneyPackage.peoples--;
_leftMoneyPackage.leftMoney -= money;
<