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() 함수는 소수점을 버린다
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() 함수를 써야한다.