发金额为100的红包,分成10份,每份红包大小随机
// 初始化分数总和 sum 和分数列表 scores
double sum = 100;
List<Double> scores = new ArrayList<>();
// 随机生成 9 个分数
for (int i = 0; i < 9; i++) {
double score = Math.round(Math.random() * (sum / 2) * 10.0) / 10.0;
scores.add(score);
sum -= score;
}
// 最后一个分数为总和减去前 9 个分数的和
double lastScore = Math.round(sum * 10.0) / 10.0;
scores.add(lastScore);
// 打印输出结果
System.out.println("分数列表:");
scores.forEach(System.out::println);
System.out.println("分数总和:" + scores.stream().mapToDouble(Double::doubleValue).sum());
在此版本中,我们使用了 Math.round
方法来将浮点数保留 1 位小数。随机生成 9 个分数时,每次生成的随机数范围是 0 到当前分数总和的一半,并调用 Math.round
方法将其保留 1 位小数。然后从分数总和中减去该随机数,并将其添加到分数列表中。
最后一个分数与前 9 个分数计算方法相同,但是需要使用 Math.round
方法将其保留 1 位小数。在此版本中,我们将 Math.round
方法与数值乘以 10.0 然后除以 10.0 的技巧相结合,确保保留 1 位小数并正确舍入。
希望这个修正的版本能够帮助到您,如果您有任何问题,请随时提问!