Java 实现简单的发红包代码

编程知识 更新时间:2023-04-07 06:21:23

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 实现简单的发红包代码

本文发布于:2023-04-07 06:21:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/eceae3eb76e2de2016b69aaa2d338cbe.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:代码   简单   发红包   Java

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 52503文章数
  • 14阅读数
  • 0评论数