자바스크립트 Number 메소드
자바스크립트 Number 메소드를 제대로 익히면 문자열-숫자 변환, 정밀도 제어, 데이터 검증까지 한층 수월해집니다. 본 글에서는 정적(static) 메소드와 인스턴스(prototype) 메소드를 예제와 함께 체계적으로 정리했습니다.
1️⃣ Number 객체 정적 메소드 한눈에 보기
| 메소드 | 핵심 기능 | 주요 용도 |
|---|---|---|
| Number.parseFloat() | 문자열 → 실수 추출 | 가격, 좌표 등 소수점 데이터 파싱 |
| Number.parseInt() | 문자열 → 정수 추출 | 개수, 인덱스 등 정수형 파싱 |
| Number.isNaN() | 정확히 NaN 인지 검사 |
계산 오류 검증 |
| Number.isFinite() | 유한한 수인지 검사 | 무한대 Infinity 필터링 |
| Number.isInteger() | 정수 여부 판단 | 배열 길이, 페이지 번호 검사 |
| Number.isSafeInteger() | 안전 정수(±2⁵³-1)인지 | 금융, ID 같은 정밀 정수 검증 |
Tip
전역 함수
isNaN()·isFinite()는 암묵 형변환 이 일어나므로, Number.접두어 버전을 쓰면 더 안전합니다.
2️⃣ 문자열 → 숫자: parseFloat · parseInt
Number.parseFloat()
Number.parseFloat("12.34abc"); // 12.34
Number.parseFloat("10text20"); // 10
Number.parseFloat("text123"); // NaN
앞쪽에 숫자가 없으면 결과는 NaN입니다.
Number.parseInt()
Number.parseInt("99 cats"); // 99
Number.parseInt("12.99text"); // 12
Number.parseInt("abc123"); // Na
- 소수점 이하 잘림
- 진법이 바뀔 가능성이 있으면 두 번째 인자에
10을 명시하세요 →parseInt("08", 10).
3️⃣ 데이터 검증 메소드: isNaN • isFinite • isInteger • isSafeInteger
Number.isNaN(NaN); // true
Number.isFinite(100); // true
Number.isInteger(5.5); // false
Number.isSafeInteger(2 ** 53); // false
- NaN 체크 →
Number.isNaN() - 무한대 방어 →
Number.isFinite() - 정수·안전 정수 → 정밀 계산이 필요한 곳에 필수!
4️⃣ Number.prototype 메소드 디테일
| 메소드 | 설명 | 예시 결과 |
|---|---|---|
| toExponential(digits?) | 지수 표기 | 12345.678.toExponential(2) → "1.23e+4" |
| toFixed(digits?) | 소수점 자리 고정 | 3.14159.toFixed(2) → "3.14" |
| toPrecision(digits?) | 전체 자릿수 고정 | 123.456.toPrecision(4) → "123.5" |
| toString(radix?) | 문자열(2-36진법) | (255).toString(16) → "ff" |
| valueOf() | 원시 숫자 반환 | (new Number(42)).valueOf() → 42 |
자주 쓰는 포맷팅 패턴
// 통화처럼 소수점 2자리 고정
let price = 1999.9;
price.toFixed(2); // "1999.90"
// 2진수·16진수 변환
(10).toString(2); // "1010"
(255).toString(16); // "ff"
주의 숫자 리터럴에 toString() 바로 호출 시엔 괄호 로 감싸야 파싱 오류를 막을 수 있습니다.
5️⃣ 실전 베스트 프랙티스
- 데이터 파싱
- 사용자가 입력한 문자열은
Number.parseFloat/Int로 정제 후Number.isNaN검사
- 사용자가 입력한 문자열은
- 정밀 계산
- 금액·통화는 정수로 스케일링→연산→다시 나누기
- 대용량 ID
Number.isSafeInteger()로 2⁵³-1 초과 여부 확인- 넘어가면 BigInt 또는 문자열 ID 사용
- 출력 포맷
- 보고용 숫자는
toLocaleString()(천 단위 콤마)와 결합하면 가독성 UP
- 보고용 숫자는
질문 정리
Q1. 0.1 + 0.2 가 0.3000004… 처럼 나와요!
A. 부동소수점 오차입니다. (0.1 * 10 + 0.2 * 10) / 10 처럼 정수화 후 계산하거나 BigInt·소수 라이브러리를 사용하세요.
Q2. parseInt("08") 이 8이 아닌 경우가 있던데요?
A. ES5 이전 브라우저가 0 접두사를 8진수로 해석한 탓입니다. 기수(10)를 꼭 지정하세요: parseInt("08", 10).
Q3. Number 래퍼 객체를 써도 되나요?
A. 가능하지만 타입 혼란과 불필요한 래핑으로 성능이 떨어질 수 있습니다. 대부분 숫자 리터럴을 그대로 쓰는 편이 좋습니다.
Q4. isFinite() 전역 함수와 Number.isFinite() 차이는?
A. 전역 isFinite()는 문자열을 숫자로 변환 후 검사합니다. 엄격 검증이 필요하다면 Number.isFinite()를 사용하세요.
Q5. 소수점 반올림 오류를 깔끔히 해결하려면?
A. 계산 후 toFixed() 또는 toPrecision()으로 문자열 포맷을 맞추고, 화면 표시는 Number()로 다시 변환하거나 그대로 출력하면 됩니다.
댓글남기기