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을 뺀 값이 배열의 마지막 인덱스와 일치하기 때문이다.
'Programming > javascript' 카테고리의 다른 글
[javascript] 월초 월말 (0) | 2015.05.11 |
---|---|
[javascript] 웹, 모바일 접속여부(종류 체크) (0) | 2015.05.11 |
[javascript] 팝업 오늘 하루동안 열지 않음 (0) | 2015.04.07 |
[javascript] 자식창에서 부모창 함수 호출 (0) | 2015.04.02 |
[javascript] URL 주소 가져오기 (0) | 2015.04.02 |