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