金額が 100 の赤い封筒を 10 つの部分に分けて送信します。各赤い封筒のサイズはランダムです。

金額が 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 桁を確保し、正しい丸めを実現しました。

この修正版がお役に立てば幸いです。ご質問がございましたら、お気軽にお問い合わせください。

おすすめ

転載: blog.csdn.net/weixin_39519454/article/details/130397969