admin管理员组

文章数量:1794759

Java 实现简单的发红包代码

Java 实现简单的发红包代码

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