JavaScript에서 소수(십진수) 문자열로 이루어진 배열을 받아, 각 요소의 소수점 이하 값을 버린 정수 문자열 배열을 반환하는 함수를 작성해야 하는 경우가 있습니다.
예를 들어 입력 배열이 다음과 같다면,
const input = ["1.00", "-2.5", "5.33333", "8.984563"];
출력 결과는 다음과 같습니다.
const output = ["1", "-2", "5", "8"];
구현 예제
이를 구현한 코드는 다음과 같습니다.
const input = ["1.00", "-2.5", "5.33333", "8.984563"];
const roundIntegers = arr => {
const res = [];
arr.forEach((el, ind) => {
const strNum = String(el);
res[ind] = parseInt(strNum);
});
return res;
};
console.log(roundIntegers(input));실행 결과
콘솔에 출력되는 결과는 아래와 같습니다.
[ 1, -2, 5, 8 ]
코드 설명
핵심 원리는 parseInt() 함수의 동작 방식에 있습니다. parseInt()는 문자열을 처음부터 읽다가 숫자가 아닌 첫 번째 문자를 만나면 파싱을 중단하기 때문에, 소수점(.) 앞까지만 추출하여 정수를 반환합니다. 따라서 "5.33333"은 5로, "8.984563"은 8로 변환됩니다.
참고로 parseInt("-2.5")는 -2를 반환합니다. 이는 Math.floor(-2.5)의 결과인 -3과 다른데, parseInt()는 내림(floor)이 아니라 소수 부분을 잘라내는 절삭(truncation) 방식으로 동작하기 때문입니다. 양수에서는 두 방식의 결과가 같지만, 음수 처리 시 의도에 맞게 선택하여 사용하는 것이 좋습니다.
또한 forEach문 대신 map() 메서드를 활용하면 더 간결하게 작성할 수 있습니다.
const roundIntegers = arr => arr.map(num => String(parseInt(num))); console.log(roundIntegers(input)); // [ '1', '-2', '5', '8' ]