已经有很多人写过了
微信金额是拆的时候实时算出来,不是预先分配的,采用的是纯内存计算,不需要预算空间存储。采取实时计算金额的考虑:预算需要占存储,实时效率很高,预算才效率低。
算法:
算法很简单,因为微信不会将红包的算法开源,所以,这是基于部分样本提取出的特征以及网上的资源猜测出的算法。
很简单:
基于截尾正态分布,数额随机,额度在0.01和剩余平均值*2之间。
实现上述算法的逻辑主要是:
public static BigDecimal getRandomMoney(RedPackage redPackage) { // remainSize 剩余的红包数量 // remainMoney 剩余的钱 int remainSize = redPackage.getRemainSize(); BigDecimal remainMoney = redPackage.getRemainMoney(); if (remainSize == 1) { remainSize--; redPackage.setRemainSize(remainSize); redPackage.setRemainMoney(BigDecimal.ZERO); return remainMoney; } Random r = new Random(); BigDecimal min = new BigDecimal(0.01); BigDecimal max = remainMoney.divide(new BigDecimal(remainSize * 2), 2, RoundingMode.HALF_UP); BigDecimal mo