Front-end/Javascript

[JS] 랜덤 숫자 생성법 이해하기 | Math.random()

페블_ 2023. 9. 4. 18:33

Math.random()은 0부터 1 사이의 난수를 생성하는 메소드이다.

더 자세히 말하자면 0부터 0.99999... 사이의 수를 생성한다.

 

따라서 어떤 범위 사이의 랜덤 숫자를 생성하고 싶다면 여기에 적절한 값을 더하거나 곱해서 응용하면 된다.

다음은 상황별 예시이다.

1) 0~7 범위의 랜덤 난수 생성하기

Math.floor(Math.random() * 8);

 

  1. Math.random()으로 0부터 0.999999... 사이의 수가 생성된다.
  2. 여기에 8을 곱해서 0부터 7.999999... 사이의 수가 생성된다.
  3. Math.floor()로 소수점 이하를 절삭해서 0부터 7이하의 난수를 얻는다.

따라서 0 이상 n 이하의 수를 얻고 싶다면 Math.random()에 n보다 1 큰 수를 곱한 다음, 소수점을 자르면 된다.

Math.floor(Math.random() * (n + 1));

 

2) 1 이상 11 이하의 랜덤 난수 생성하기

최소 범위와 최대 범위 숫자가 뭐였는지 매번 떠올리려면 힘드므로 변수에 저장하자.

const min = 1;
const max = 11;

console.log(Math.floor(Math.random() * (max - min + 1)) + min);
  1. Math.random() 함수는 0부터 n 이하의 수밖에 못만든다. 따라서 0부터 min ~ max의 구간만큼 랜덤숫자를 구한 다음, 최종적으로 min을 더해줘서 최소 범위를 맞춰준다.
  2. Math.random() * (max + 1)은 0부터 max까지의 랜덤 난수를 생성할 수 있었다. 여기에 min을 빼서 0부터 min~max 구간만큼의 숫자를 구한다.
  3. min을 더해서 최소 범위를 맞춰준다. 0~(max-min)만큼의 숫자를 구했으므로 min을 더하면 min~max 의 랜덤 숫자를 구한게 된다.

 

3) 5 이상 60 이하의 랜덤 난수 생성하기

위에서 구한 공식에 대입해보면

Math.floor(Math.random() * (60 - 5 + 1)) + 5

이렇게 구할 수 있다.