public class Test2 { public static void main(String[] args) { Random random = new Random(); BigDecimal total = new BigDecimal(100);//红包总价值100 int personNum = 10 ;//红包受众10人 BigDecimal surplus = total;//红包剩余钱 BigDecimal min = new BigDecimal(0.01);//最小值 BigDecimal total2 = new BigDecimal(0); int i = 0; while (i<=personNum){ if(i == personNum){ System.out.println("redBag=" + surplus.setScale(2,BigDecimal.ROUND_HALF_UP)); i++; total2 = total2.add(surplus.setScale(2,BigDecimal.ROUND_HALF_UP)); }else { BigDecimal doubleExcept = surplus.divide(new BigDecimal(personNum - i), 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(2)); BigDecimal redBag; //这里要特别注意,随机出来的数不能大于剩余钱数 while(true){ redBag = new BigDecimal(random.nextDouble()).multiply(doubleExcept); if(redBag.compareTo(surplus)<1){ break; } } System.out.println("redBag=" + redBag.setScale(2, BigDecimal.ROUND_HALF_UP)); i++; surplus = surplus.subtract(redBag.setScale(2, BigDecimal.ROUND_HALF_UP)); total2 = total2.add(redBag.setScale(2,BigDecimal.ROUND_HALF_UP)); } } System.out.println(total2);//用来验算所有红包加起来是否等于100 }
微信抢红包算法DEMO
最新推荐文章于 2024-11-15 14:55:12 发布