TL; DR
function generateRandomInteger(min, max) {
return Math.floor(min + Math.random()*(max + 1 - min))
}
Untuk mendapatkan nomor acak
generateRandomInteger(-20, 20);
PENJELASAN DI BAWAH INI
Kita perlu mendapatkan integer acak, misalkan X antara min dan maks.
Baik?
yaitu
min <= X <= maks
Jika kita mengurangi min dari persamaan, ini sama dengan
0 <= (X - mnt) <= (Maks - mnt)
Sekarang, mari kita gandakan ini dengan angka acak r
yang
0 <= (X - mnt) * r <= (maks - mnt) * r
Sekarang, mari tambahkan kembali min ke persamaan
min <= min + (X - min) * r <= min + (maks - min) * r
Sekarang, mari kita pilih fungsi yang menghasilkan r sehingga memenuhi rentang persamaan kita sebagai [min, maks]. Ini hanya mungkin jika 0 <= r <= 1
BAIK. Sekarang, kisaran r yaitu [0,1] sangat mirip dengan hasil fungsi Math.random (). Bukan?
Fungsi Math.random () mengembalikan angka floating-point, pseudo-random dalam rentang [0, 1); yaitu, dari 0 (inklusif) hingga tetapi tidak termasuk 1 (eksklusif)
Sebagai contoh,
Kasus r = 0
min
+ 0 * ( max
- min
) = mnt
Kasus r = 1
min
+1 * ( max
- min
) = maks
Kasus Acak menggunakan Math.random 0 <= r <1
min
+ r * ( max
- min
) = X , di mana X memiliki rentang min <= X < maks
Hasil di atas X adalah angka acak. Namun karena Math.random () batas kiri kami inklusif, dan batas kanan eksklusif. Untuk memasukkan batas kanan kami, kami menambah batas kanan 1 dan lantai hasilnya.
function generateRandomInteger(min, max) {
return Math.floor(min + Math.random()*(max + 1 - min))
}
Untuk mendapatkan nomor acak
generateRandomInteger(-20, 20)
;