← 기록 목록

JavaScript

Math.random(): 난수 생성

Math.random()은 0 이상 1 미만의 난수를 반환한다. 0은 포함하지만 1은 포함하지 않는다.

Math.random();      // 0 이상 1 미만
Math.random() * 10; // 0 이상 10 미만

범위를 조절하려면 구간의 길이를 곱하고 최솟값을 더한다.

function randomBetween(min, max) {
  return Math.random() * (max - min) + min;
}

randomBetween(1, 10); // 1 이상 10 미만의 실수

정수 범위에서 최솟값과 최댓값을 모두 포함하려면 다음처럼 계산한다. min과 max는 정수이고 min <= max라고 가정한다.

function randomInteger(min, max) {
  return Math.floor(Math.random() * (max - min + 1)) + min;
}

randomInteger(1, 10); // 1부터 10까지의 정수

Math.round(): 반올림

입력값에 가장 가까운 정수를 반환한다. 두 정수의 중간에 해당하면 더 큰 정수 쪽으로 반올림한다. 음수에서도 같은 기준을 적용한다.

Math.round(1.222);  // 1
Math.round(1.5);    // 2
Math.round(-1.5);   // -1
Math.round(-1.777); // -2

소수점 첫째 자리나 10의 자리로 반올림할 때는 배율을 조절한다.

Math.round(1.777 * 10) / 10; // 1.8
Math.round(1005 / 10) * 10; // 1010

부동소수점 오차

JavaScript의 숫자 표현에서는 일부 소수를 정확히 나타낼 수 없다.

1.005 * 100;                    // 100.49999999999999
Math.round(1.005 * 100) / 100;    // 1
Math.round((1.005 + Number.EPSILON) * 100) / 100; // 1.01

Number.EPSILON은 1과 그다음으로 큰 표현 가능한 숫자의 차이다. 모든 크기의 숫자에 적용할 수 있는 일반적인 오차 보정값은 아니다. 필요한 정밀도와 숫자의 크기를 고려해야 한다.

Math.ceil(): 올림

입력값 이상인 정수 중 가장 작은 정수를 반환한다.

Math.ceil(10.95);  // 11
Math.ceil(11.01);  // 12
Math.ceil(11);     // 11
Math.ceil(-10.95); // -10
Math.ceil(-11.01); // -11

Math.floor(): 내림

입력값 이하인 정수 중 가장 큰 정수를 반환한다. 음수에서 단순히 소수점 이하를 버리는 것과는 다르다.

Math.floor(3.145);  // 3
Math.floor(-3.145); // -4

참고