JavaScript
[JS] 랜덤(Math.random), 반올림, 올림, 내림 (round, ceil, floor)
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