admin管理员组文章数量:1794759
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 0PS:以上,即是一个简单的发红包代码实现,还可以做更细的情况需考虑:
红包个数 校验 红包金额 金额校验 单个红包最低 0.01的情况校验 并发情况下的处理 ...版权声明:本文标题:Java 实现简单的发红包代码 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686845227a109476.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论