[javascript] JavaScript에서 두 숫자 사이의 난수 생성

JavaScript에서 지정된 범위 (예 : 1에서 6 : 1, 2, 3, 4, 5 또는 6)의 난수를 생성하는 방법이 있습니까?



답변

중대한

다음 코드는 최소값이 인 경우에만 작동합니다 1. 이외의 최소값에는 작동하지 않습니다 1.

1 1 사이의 임의의 정수를 얻으려면 다음 과 같이 계산하십시오.

Math.floor(Math.random() * 6) + 1  

어디:

  • 1은 시작 번호입니다
  • 6은 가능한 결과 수입니다 (1 + 시작 (6) -끝 (1) )

답변

function randomIntFromInterval(min, max) { // min and max included 
  return Math.floor(Math.random() * (max - min + 1) + min);
}

“추가”는 1로 시작하지 않는 임의의 간격을 허용한다는 것입니다. 예를 들어 10에서 15 사이의 임의의 숫자를 얻을 수 있습니다. 적응성.


답변

Math.random ()

min ( 포함 )과 max ( 포함 ) 사이 의 정수 난수를 반환합니다 .

function randomInteger(min, max) {
  return Math.floor(Math.random() * (max - min + 1)) + min;
}

또는 min ( 포함 )과 max ( 포함되지 않음 ) 사이의 임의의 숫자 :

function randomNumber(min, max) {
  return Math.random() * (max - min) + min;
}

유용한 예 (정수) :

// 0 -> 10
Math.floor(Math.random() * 11);

// 1 -> 10
Math.floor(Math.random() * 10) + 1;

// 5 -> 20
Math.floor(Math.random() * 16) + 5;

// -10 -> (-2)
Math.floor(Math.random() * 9) - 10;

** 그리고 항상 상기시켜주는 것이 좋습니다 (Mozilla) :

Math.random ()은 암호로 안전한 임의의 숫자를 제공하지 않습니다. 보안과 관련하여 사용하지 마십시오. 대신 Web Crypto API를 사용하십시오.보다 정확하게는 window.crypto.getRandomValues ​​() 메소드입니다.


답변

다른 솔루션 :

  • (Math.random() * 6 | 0) + 1
  • ~~(Math.random() * 6) + 1

온라인으로 시도


답변

TL; DR

function generateRandomInteger(min, max) {
  return Math.floor(min + Math.random()*(max + 1 - min))
}

난수를 얻으려면
generateRandomInteger(-20, 20);

아래 설명

최소와 최대 사이의 X 와 같은 임의의 정수를 가져와야합니다.

권리?


최소 <= X <= 최대

방정식에서 min을 빼면 다음과 같습니다.

0 <= (X-최소) <= (최대-최소)

이제 임의의 숫자와 곱셈이 있습니다 R
입니다

0 <= (X-최소) * r <= (최대-최소) * r

이제 방정식에 최소값 을 다시 추가 합니다

최소 <= 최소 + (X-최소) * r <= 최소 + (최대-최소) * r

이제 우리의 방정식 범위가 [min, max]를 만족하도록 r이 되는 함수를 선택해 봅시다. 0 <= r <= 1 인 경우에만 가능합니다.

확인. 지금의 범위 (R)의 예 [0,1] 인 Math.random () 함수의 결과와 매우 유사하다. 그렇지 않습니까?

Math.random () 함수는 [0, 1) 범위의 부동 소수점 의사 난수를 반환합니다. 즉, 0 (포함)부터 1 (제외)까지는 포함하지 않음

예를 들어

사례 r = 0

min+ 0 * ( maxmin) =

사례 r = 1

min+ 1 * ( maxmin) = 최대

Math.random 0 <= r <1을 사용한 임의의 경우

min+ r * ( maxmin) = X. 여기서 X의 범위는 최소 <= X < 최대입니다.

위의 결과 X 는 임의의 숫자입니다. 그러나 Math.random ()으로 인해 왼쪽 경계가 포함되고 오른쪽 경계가 배타적입니다. 오른쪽 경계를 포함하기 위해 오른쪽 경계를 1 씩 늘리고 결과를 바닥에 둡니다.

function generateRandomInteger(min, max) {
  return Math.floor(min + Math.random()*(max + 1 - min))
}

난수를 얻으려면

generateRandomInteger(-20, 20);


답변

또는 밑줄로

_.random(min, max)


답변

var x = 6; // can be any number
var rand = Math.floor(Math.random()*x) + 1;