模拟抢红包小程序,具体的算法是在0.01和剩余平均值的2倍之间随机生成一个金额,不啰嗦下面看代码
public static void main(String[] args) {
List<Double> l = new ArrayList<>();
//模拟发红包
double a = 50.42d; //总金额
int b = 15; //红包个数
double min = 0.01d; //最少红包金额
for (int i = b; i > 1; i--) {
//计算随机金额
double v = a / i * 2;
//四舍五入为两位小数
double generatedDouble = ThreadLocalRandom.current().nextDouble(min, v);
BigDecimal c = new BigDecimal(generatedDouble);
double v1 = c.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
System.out.println(v1);
l.add(v1);
a = a-v1;
b--;
}
//最后一个红包
System.out.println("剩余"+b+"个红包,金额为:"+a);
//验证发出的红包金额之和是否等于总金额
for (double m : l) {
a += m;
}
System.out.println(a);
}