2013-09-26 3 views
2

В моей программе я хочу сгенерировать 5-значное случайное число, которое содержит только цифры (от 1 до 7).генерировать случайное число, используя определенные цифры в javascript

var randnum = Math.floor(Math.random() * (11111 - 77777 + 1)) + 11111; 

Используя выше код, который я получил номер между 11111 и 77777. Но как сгенерировать номер, который не содержит 0,8,9? Есть ли метод по умолчанию для создания такого рода чисел?

ответ

1

Например,

digits = [1,2,3,4,5,6,7] 
len = 5 
num = 0 
while(len--) 
    num = num * 10 + digits[Math.floor(Math.random() * digits.length)] 
console.log(num) 

Таким образом вы можете легко выбрать, какие цифры использовать.

+0

В python (список) Я использую random.sample(['1','2','3','4','5','6','7'],5), чтобы сделать это. Есть ли какая-либо аналогичная функция по умолчанию в js? – mridul

+0

@mridul: 'random.sample' возвращает неповторяющиеся значения, поэтому вы не получите от него' 11111'. Нет, в JS нет такой встроенной системы, «Math.random» - это почти все, что у вас есть. – georg

2

Вы можете создавать каждую цифру в то время, сцепить их тогда ParseInt, чтобы получить результат:

var str = ''; 
for (var i=0; i<5; i++) { 
    str += Math.floor(Math.random()*7) + 1; 
} 
var randnum = parseInt(str); 

Demo

Пояснение

Math.random() возвращает [0,1)

Math.random() * 7 возвращается [0,7)

Math.floor(...) возвращается 0,1,2,3,4,5,6

...+1 возвращает 1,2,3,4,5,6,7

+0

Math.ceil (Math.random() * 7) ... +1 создаст 8 с 0.99 по Math.random –

+3

'Math.random' возвращает число в диапазоне от [0,1]. Если он вернет 0, 'Math.ceil' будет 0, умноженное на 7, будет 0, которое не соответствует требуемому диапазону. – Tibos

+2

@SergeyKochetov Нет, его следует умножить на 7, потому что это дает диапазон '[0, 6]' и '+ 1' дает' [1, 7] '. –

Смежные вопросы