JavaScript-Math.floor(Math.random()) : 난수생성

hannah·2023년 7월 26일
0

JavaScript

목록 보기
31/121

Math.random()

0 이상과 1 미만의 수를 무작위로 생성하는 함수

1~9까지의 수가 필요한 경우 Math.random()에 9를 곱한 후 1을 더하면 되고 이 숫자를 자연수로 만들려면 내림, 올림, 반올림을 해야한다. 이 경우에는 내림을 한다.

자바스크립트에서 숫자의 내림은 Math.floor()로 할 수 있다. 참고로 올림은 Math.ceil()이고 반올림은 Math.round()이다.

    /*
        Math.random() : 0 ~ 1 까지의 숫자중에서 랜덤한수(난수)가 생성
        최소값 : 0.00000...0000 ~ 0.99999...9999
        일정 범위에 따라서 랜덤한 숫자를 추출할 때 사용하는 함수
        랜덤한 값 * 숫자 : 0 * 숫자 : 0 ~ 0.999999.99 * 숫자
        범위를 잡을때 0 ~ 100 : 곱하기만 해도 표현가능
        범위를 잡을때 1 ~ 100 : 곱하기만으로는 표현 불가능 : 더하기를 이용
        Math.random() 에서의 "+" : 범위의 최소값을 설정할 때 사용
        Math.random() 에서의 "*" : 0.99999 기준으로 곱하기 때문에 
                                  범위의 최대값+1인 값으로 설정

   ex)
     0 ~ 10 : *11(범위최대값+1)로 표현
     0 ~ 100 : *101(범위최대값+1)로 표현 
            
     예외 ! 
     * 최소범위가 0이 아닐때 문제

     10 ~ 20 : * 21(범위최대값+1) > 0 ~ 20 > 최소값때문에 (*21(범위최대값+1)-최소값) + 10 > 10 ~ 30
     Math.random() * (범위최대값+1-최소값) + 최소값
     => (Math.random()*11)+10

    */

    //0 ~ 10 까지 
    let random1 = Math.floor(Math.random()*11);
    document.write("0 ~ 10 까지 : "+random1+"<br>");
    
    //0 ~ 100 까지 
    let random2 = Math.floor(Math.random()*101);
    document.write("0 ~ 100 까지 : "+random2+"<br>");
    
    //55 ~ 555 까지 
    let random3 = Math.floor(Math.random()*501)+55;
    document.write("55 ~ 555 까지 : "+random3+"<br>");

예시j

Math.random()		//0.29566654674410153
Math.floor(Math.random()*9+1)	//3

Math.floor 와 parseInt() 함수의 차이

두 함수 모두 정수를 출력한다는 기능은 같으나 음수를 사용할 때 차이점이 발생한다.
Math.floor() 함수는 첫번째 소수값을 내림하고
parseInt() 함수는 소수점을 버린다

console.log(Math.floor(-10.88));    // 출력값 : -11
console.log(parseInt(-10.88));      // 출력값 : -10

인덱스를 랜덤으로 배열에 넣기

array 값이 가변적이라고 가정하고 아래의 코드를 보면,

const randomNumber = array[Math.floor(Math.random( )*array.length)];

randomNumber의 인덱스는 0부터 array.length-1 까지 나온다.
예를 들어, array.length가 3일 경우에 randomNumber로 나올 수 있는 경우의 수는 0,1,2이다.

참고
Math.random()은 암호학적으로 완전한 무작위가 아니기 때문에 보안과 관련된 작업을 할 때에는 window.crypto.getRandomValues() 함수를 써야한다.

0개의 댓글