public class Test {
public static BigDecimal getRandomMoney(RedPackage _redPackage) {
// remainSize 剩余的红包数量
// remainMoney 剩余的钱
if (_redPackage.remainSize == 1) {
_redPackage.remainSize--
return _redPackage.remainMoney.setScale(2, BigDecimal.ROUND_DOWN)
}
BigDecimal random = BigDecimal.valueOf(Math.random())
BigDecimal min = BigDecimal.valueOf(0.01)
BigDecimal halfRemainSize = BigDecimal.valueOf(_redPackage.remainSize).divide(new BigDecimal(2), BigDecimal.ROUND_UP)
BigDecimal max1 = _redPackage.remainMoney.divide(halfRemainSize, BigDecimal.ROUND_DOWN)
BigDecimal minRemainAmount = min.multiply(BigDecimal.valueOf(_redPackage.remainSize - 1)).setScale(2, BigDecimal.ROUND_DOWN)
BigDecimal max2 = _redPackage.remainMoney.subtract(minRemainAmount)
BigDecimal max = (max1.compareTo(max2) < 0) ? max1 : max2
BigDecimal money = random.multiply(max).setScale(2, BigDecimal.ROUND_DOWN)
money = money.compareTo(min) < 0 ? min : money
_redPackage.remainSize--
_redPackage.remainMoney = _redPackage.remainMoney.subtract(money).setScale(2, BigDecimal.ROUND_DOWN)
return money
}
public static void main(String[] args) {
RedPackage moneyPackage = new RedPackage()
moneyPackage.remainMoney = BigDecimal.valueOf(100)
moneyPackage.remainSize = 10
List<BigDecimal> list = new ArrayList<>()
while (moneyPackage.remainSize != 0) {
BigDecimal randomMoney = getRandomMoney(moneyPackage)
list.add(randomMoney)
}
System.out.println(list.toString())
}
static class RedPackage {
int remainSize
BigDecimal remainMoney
}
}