본문 바로가기

Programming/javascript

[javascript] Math.random() 임의의 수 반환하기

Math.random() 임의의 수 반환하기



Math.random() 함수는 항상 다음과 같은 0과 1사이의 난수를 반환한다.

0.5439371350221336

0.16303899395279586

0.083454973064363


그래서 자신이 원하는 범위내에서의 난수를 원한다면 다음과 같은 식을 쓰면 된다.

var random_num = Math.floor(Math.random() * 원하는 경우의 수 + 그 중의 가장 작은 값);

여기서 Math.floor()를 쓴 이유는 Math.random()이 항상 0과 1 사이의 숫자를 반환하기 때문에

여기서 정수를 곱하고, 더하여도 여전히 소수점이 유지되기 때문이다.


그래서 예를 들어 1과 10사이의 난수를 발생시킨다고 한다면 다음과 같다.

var random_num = Math.floor(Math.random() * 10 + 1);


직접 log를 찍어 보았다.

<script type="text/javascript">

var random_num = Math.random();


console.log("발생난수 : " + random_num);

console.log("곱한 값 : " + (random_num * 10) + ", 더한 값 : " + (random_num * 10 + 1));

console.log("내림한 값 : " + Math.floor(random_num * 10 + 1));

</script>


결과


발생난수 : 0.9451439403928816

곱한 값 : 9.451439403928816, 더한 값 : 10.451439403928816

내림한 값 : 10



하지만 책에는 위처럼 경우의 수를 세는 것 보다는 범위만 제공하면 그 사이의 난수를

반환하는 함수 식이 있다.

function selectFrom(lowerValue, upperValue){

var choices = upperValue - lowerValue + 1;

return Math.floor(Math.random() * choices + lowerValue);

}


var num = selectFrom(2, 10);

alert(num); // , 2와 10을 포함한 2와 10사이의 난수.



이런식이면 배열에서 임의값을 빼낼때도 유용하다


var colors = ["red", "green", "blue", "yellow", "black", "purple", "brown"];

var color = colors[selectFrom(0, color.length - 1)];


-1은 배열의 길이에서 1을 뺀 값이 배열의 마지막 인덱스와 일치하기 때문이다.