2 분 소요

자바스크립트 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()로 다시 변환하거나 그대로 출력하면 됩니다.

카테고리:

업데이트:

댓글남기기