double min = 0.0001;
double max = 10; // 总和
int cnt = 5; // 数量
int scl = 4; // 小数最大位数
int pow = (int) Math.pow(10, scl); // 用于提取指定小数位
double sum = 0; // 用于验证总和
double one ;
for (int i = 0; i < cnt; i ++) {
if ( i < cnt - 1 ) {
// min~max 指定小数位的随机数
one = Math.floor((Math.random() * (max - min) + min) * pow) / pow;
} else {
one = max;
}
max -= one;
sum += one;
// 输出
System.out.printf("%.4f\r\n", one);
}
// 验证
System.out.println(sum);
/*
演示输出:
6.7665
1.7457
0.0602
1.0894
0.3382
10.0
*/
Jika anda mahu jurang antara nombor rawak menjadi lebih kecil, anda boleh mengubah suai formula pengiraan satu, seperti menggantikan maks - min dengan maks / (cnt - i). Sudah tentu, anda perlu memberi perhatian kepada nilai min untuk mengelakkan satu menjadi nombor negatif pada akhirnya.
Jika ini adalah soalan ujian subjek, saya rasa titik ujian haruslah mengambil nombor rawak antara m~n yang ditentukan. Demi jawapan saya yang menyusahkan, saudara-saudara yang lalu lalang boleh memberi saya ibu jari.
Jika anda mahu jurang antara nombor rawak menjadi lebih kecil, anda boleh mengubah suai formula pengiraan satu, seperti menggantikan maks - min dengan maks / (cnt - i). Sudah tentu, anda perlu memberi perhatian kepada nilai min untuk mengelakkan satu menjadi nombor negatif pada akhirnya.
Jika ini adalah soalan ujian subjek, saya rasa titik ujian haruslah mengambil nombor rawak antara m~n yang ditentukan. Demi jawapan saya yang menyusahkan, saudara-saudara yang lalu lalang boleh memberi saya ibu jari.
Ia hanya boleh menjamin bahawa jumlahnya adalah sama, tetapi hasilnya tidak begitu seragam dan selalunya sangat berat