Java 实现简单的发红包代码

一、实现思路

        1、参考微信发红包,会有2个参数: 红包个数红包金额 ,假设红包个数是num,红包金额是money ,使用随机数的方式进行划分,不考虑多线程情况下的并发情况, 一个简单的实现。

二、代码实现

        1、红包代码如下

/**
 * 发红包的代码
 * @param num  红包个数
 * @param money 红包金额
 * @return
 */
static List<Double> hb(int num , double money){
    //todo:省略红包个数、红包金额、单个红包最低 0.01的情况校验
    ArrayList<Double> list = new ArrayList<>();
    double sum = 0D ; // 记录已分配的红包金额
    double amount = money ; //记录余额
   while (num > 0){
       num--;
       double v = 0 ;
       if(num != 0){
           v = ThreadLocalRandom.current().nextDouble(0, amount);
       }else {
           // 最后一个红包
           v = money -sum ;
       }
       BigDecimal decimal = BigDecimal.valueOf(v).setScale(2, RoundingMode.HALF_UP);
       double hb = decimal.doubleValue();
       sum += hb;
       amount = money - sum;
       System.out.println(hb);
        list.add(hb);
   }
   System.out.println("sum:"+ sum);
   System.out.println("amount:"+ amount);
    return list ;
}

        2、测试:


public static void main(String[] args) {
    List<Double> hb = hb(5, 10);
    System.out.println(hb);
    double v = hb.stream().collect(Collectors.summingDouble(x -> {
        return x;
    })).doubleValue();
    System.out.println("合计金额:" +v);
}

        3、输出结果如下:

6.72
1.71
0.87
0.62
0.08
sum:9.999999999999998
amount:1.7763568394002505E-15
[6.72, 1.71, 0.87, 0.62, 0.08]
合计金额:10.0

Process finished with exit code 0

        PS:以上,即是一个简单的发红包代码实现,还可以做更细的情况需考虑:

红包个数 校验
红包金额 金额校验
单个红包最低 0.01的情况校验
并发情况下的处理
...

更多推荐

Java 实现简单的发红包代码