JS - Math.random() - 유형별 랜덤 숫자 생성하기 (난수, 임의의 수 만들기)

반응형

 

이번 포스팅에서는 여러가지 형태의 난수를 생성하는 방법을 다룹니다.


Math.random()

  • 0이상 1 미만의 구간에서 랜덤한 부동소숫점의 난수를 반환해주는 함수
let rnd = Math.random();

console.log(rnd);
// 0.38711670788580577 (출력되는 숫자는 각자의 환경에 따라 다름)

랜덤한 정수 생성하기

  • Math.pow : 제곱을 해주는 함수, 첫번째 인자 : 제곱할 값, 두번째 인자 : 제곱
/* 정수 */
// 0 ~ 10의 n승-1 까지의 정수
// Math.floor( Math.random() * Math.pow(10, n) )

let n = 1;
Math.floor( Math.random() * Math.pow(10, n) ) // 0 ~ 9 까지의 정수
n = 2;
Math.floor( Math.random() * Math.pow(10, n) ) // 0 ~ 99 까지의 정수
n = 3;
Math.floor( Math.random() * Math.pow(10, n) ) // 0 ~ 9999 까지의 정수

/* 0 ~ 99 까지의 정수 난수 출력 예시 */
let rnd = 0;
let n = 2;
for (let i=0; i<3; i++) {
    rnd = Math.floor(Math.random() * Math.pow(10, n));
    console.log(rnd);
}
// 59
// 92
// 37

랜덤한 실수 생성하기

  • toFixed : 소수점 오류 없이 깔끔하게 출력해주기 위한 함수, 부동 소수점을 고정 소수점으로 변경
/* 실수(소수점) */
// 소수점 최대 m 번째 자리까지 표시
// Math.random().toFixed(m);

let m = 1;
Math.random().toFixed(m); // 소수점 첫째 자리까지
m = 2;
Math.random().toFixed(m); // 소수점 둘째 자리까지
m = 3;
Math.random().toFixed(m); // 소수점 셋째 자리까지

/* 소수점 둘째 자리까지의 난수 출력 예시 */
let rnd2 = 0;
for (let j=0; j<3; j++) {
    rnd2 = Math.random().toFixed(2);
    console.log(rnd2);
}
// 0.89
// 0.05
// 0.46

랜덤한 자연수+소수 생성하기

  • 위에 있는 코드 응용
/* 자연수 + 소수 */
// 자연수 0 ~ 10의 n승-1 까지의 정수
// 소수점 최대 m 번째 자리까지 표시
// (Math.random() * Math.pow(10, n)).toFixed(m);

let n = 1;
let m = 1;
(Math.random() * Math.pow(10, n)).toFixed(m); // 0 ~ 9 까지의 정수, 소수점 첫째 자리까지
n = 2, m = 2;
(Math.random() * Math.pow(10, n)).toFixed(m); // 0 ~ 99 까지의 정수, 소수점 둘째 자리까지
n = 3, m = 3;
(Math.random() * Math.pow(10, n)).toFixed(m); // 0 ~ 999 까지의 정수, 소수점 셋째 자리까지

/* 0 ~ 9 까지의 정수 + 소수점 둘째 자리까지의 난수 출력 예시 */
let rnd3 = 0;
n = 1, m = 2;
for (let k=0; k<3; k++) {
    rnd3 = (Math.random() * Math.pow(10, n)).toFixed(m);
	console.log(rnd3);
}
// 4.92
// 1.30
// 9.65

특정 범위를 만족하는 랜덤한 수 생성하기

  • 0과 1사이의 난수를 생성하므로 상황에 따라 난수의 형태를 원하는 출력 형태로 변경하여야 한다.

특정 범위의 부동소수점 난수

/* 특정 범위의 부동소수점 난수 */
// 최소값(min) ~ 최대값(max)+1 사이의 부동소수점 난수 (기본형태는 부동소수점이기 때문)
// Math.random() * (max-min) + min;

let min = 1;
let max = 3;
Math.random() * (max-min) + min; // 1 이상, 4 미만의 부동소수점 난수
// 부동소수점 형태이기 때문에 최대값의 소수점 포함
// 3.815030957467929

min = 3.2;
max = 3.3;
Math.random() * (max-min) + min; // 3.2 이상, 3.3 미만의 부동소수점 난수
// 3.2232259201974265

특정 범위의 정수 난수

  • 특정 범위의 정수가 최대값을 포함하는지, 포함하지 않는지의 여부도 고려해야 한다.
/* 특정 범위의 정수 난수 */
let min = 1;
let max = 3;
Math.floor(Math.random() * (max-min)) + min; // 1이상 3미만의 정수 난수
// 1

min = 1;
max = 3;
Math.floor(Math.random() * (max-min+1)) + min; // 1 ~ 3 까지의 정수 난수 (최대값 포함)

/* 1 ~ 3 까지의 정수 난수 출력 예시 */
let rnd4 = 0;
let min = 1;
let max = 3;
for (let l=0; l<3; l++) {
    rnd4 = Math.floor(Math.random() * (max-min)) + min;
    console.log(rnd4);
// 3
// 2
// 3

참고

반응형