n부터 k까지의 숫자 중 하나를 뽑는다고 가정하면,
Math.floor(Math.random()*(k-n+1))+n
floor와 random을 이용해서 숫자 뽑기.
random은 0에서 1 사이의 실수를 반환한다. 그런데 1에 가까운 숫자는 나와도 1은 나오지 않는다. 그렇기 때문에 어떤 숫자를 곱했을 때, 최댓값이 그 숫자보다 작다. 이 상태에서 floor 메소드를 쓰면, 최댓값은 곱한 숫자보다 1 작은 숫자가 나온다.
정수만 남기려면 반올림을 하는 것도 좋겠지만, 그건 숫자를 올릴 수도 내릴 수도 있기 때문에 정확하지 않은 결과가 나올 수도 있다. 그래서 확실하게 소수점 아래의 숫자들을 모두 버리는 것이 좋다.
0에서 10 사이의 숫자를 뽑는다고 가정하자.
Math.floor(Math.random()*10)
이렇게 쓰면 0에서 9 사이의 숫자들 중 하나가 나온다. 최댓값이 10보다 작기 때문이다.
Math.floor(Math.random()10+1)
Math.floor(Math.random()10)+1
이렇게 쓰면 나온 숫자들 전체에 1씩 더하는 셈이 되기 때문에, 0에서 10까지가 아닌, 1에서 10까지의 숫자들 중 하나를 반환한다.
원하는 결과를 얻고 싶다면,
Math.floor(Math.random()*11)
이렇게, 최댓값보다 1 큰 숫자를 곱해야 한다. 이렇게 하면 0부터 10 사이의 숫자가 나온다.
만약 0이나 1보다 큰 숫자부터 시작한다면 어떨까?
가령 15에서 27까지의 숫자라고 생각해보자.
먼저, 27에서 15를 뺀, 12를 곱한다.
Math.floor(Math.random()*12)
그럼 0에서 11까지의 숫자 중 하나를 출력할 것이다.
15부터 시작해야 하므로, 최솟값이 15가 되어야 한다. 그러므로 15를 더한다.
Math.floor(Math.random()*12)+15
이렇게 하면 15에서 26사이의 숫자들 중 하나가 나올 것이다.
그러나 내가 바라는 것은 27도 포함시켜서 계산하는 것이다.
Math.floor(Math.random()*13)+15
이렇게 12보다 1 큰 13을 곱해야 한다.