Public class Test {public static BigDecimal getRandomMoney(RedPackage _redPackage) {// remainSize RemainNumber of red packets // If (_redpackage.remainSize == 1) {_redpackage.remainSize --; return _redPackage.remainMoney.setScale(2, BigDecimal.ROUND_DOWN); } BigDecimal random = BigDecimal.valueOf(Math.random()); BigDecimal min = BigDecimal. The 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; }}Copy the code