JavaScript 숫자 연산 이해하기, number 타입 활용법
JavaScript에서 숫자 연산은 가장 기초적이면서도 의외로 오류를 범하기 쉬운 부분입니다. 단순히 더하고 빼는 계산을 넘어서, 내부 동작 방식과 자료형의 특징을 이해하면 코드의 안정성과 성능이 향상됩니다.
이번 글에서는 JavaScript의 number 타입에 대해 단순한 공식 암기에서 벗어나, 근본적인 원리와 실제 사례를 통해 깊이 있게 살펴봅니다. 특히 부동소수점 연산, 타입 변환, 특별한 수치 값(NaN, Infinity 등)까지 폭넓게 다루어 여러분의 숫자 연산 실력을 한층 끌어올리겠습니다.
목차
- number 타입의 특징
- 부동소수점 연산의 함정
- NaN과 Infinity, 언제 등장하는가?
- 숫자 연산과 타입 변환의 관계
- BigInt와 number의 차이점
- Math 객체로 숫자 다루기
- 안전한 숫자 연산을 위한 팁
1. number 타입의 특징
JavaScript의 number
타입은 64비트 IEEE 754 부동소수점 형식으로 표현됩니다. 이는 다음과 같은 특징을 가집니다:
- 정수와 실수를 모두 동일한 타입으로 처리
- 범위: 약 ±1.7976931348623157 × 10³⁰⁸
- 특수한 값:
NaN
,Infinity
,-Infinity
예시:
let integer = 42;
let float = 3.14;
console.log(typeof integer); // "number"
console.log(typeof float); // "number"
2. 부동소수점 연산의 함정
JavaScript의 부동소수점 연산은 정확하지 않은 결과를 종종 반환합니다. 이는 컴퓨터가 10진수를 2진수로 변환하는 과정에서 발생하는 근사 오차 때문입니다.
대표적인 예시:
console.log(0.1 + 0.2); // 0.30000000000000004
console.log(0.3 === 0.1 + 0.2); // false
Tip: 정밀 비교가 필요할 땐 Math.abs(a - b) < Number.EPSILON
을 활용하세요.
3. NaN과 Infinity, 언제 등장하는가?
값 | 등장 조건 | 설명 |
---|---|---|
NaN |
0/0, 잘못된 연산 | 숫자가 아님(Not a Number), 비교 불가능 (NaN !== NaN ) |
Infinity |
양수를 0으로 나눌 때 | 무한대 |
-Infinity |
음수를 0으로 나눌 때 | 음의 무한대 |
주의해야 할 점:
Number.isNaN()
으로 정확히NaN
판별isFinite()
로Infinity
여부 확인
4. 숫자 연산과 타입 변환의 관계
JavaScript는 암묵적 타입 변환(Coercion)을 통해 숫자가 아닌 값도 숫자처럼 처리할 수 있습니다. 대표적 사례:
console.log('5' * 2); // 10 (문자열 '5'가 숫자로 변환됨)
console.log('5' + 2); // "52" (덧셈 연산 시 문자열로 변환)
주의: 산술 연산 시 암묵적 변환으로 인한 의도치 않은 결과가 발생할 수 있으므로, Number()
나 parseInt()
등을 명시적으로 사용하는 것이 안전합니다.
5. BigInt와 number의 차이점
BigInt
는 매우 큰 정수를 안전하게 표현할 수 있는 타입입니다.
특징 | number | BigInt |
---|---|---|
범위 | 약 ±9,007,199,254,740,991 (2⁵³-1) | 제한 없음 (메모리 크기 제한) |
정밀도 | 부동소수점 오차 있음 | 정확한 정수 연산 |
사용 방법 | 42 |
42n |
주의: BigInt
와 number
타입은 직접 연산이 불가능하므로 명시적 변환 필요.
6. Math 객체로 숫자 다루기
JavaScript의 Math
객체는 숫자 연산을 도와주는 다양한 함수들을 제공합니다.
Math.round(), Math.floor(), Math.ceil()
: 반올림, 내림, 올림Math.random()
: 난수 생성Math.max(), Math.min()
: 최댓값, 최솟값 찾기Math.pow(), Math.sqrt()
: 제곱, 제곱근 계산
예시:
console.log(Math.max(1, 5, 10)); // 10
console.log(Math.random() * 100); // 0~99 난수
7. 안전한 숫자 연산을 위한 팁
- 부동소수점 오차 주의 → 정밀 계산 시
toFixed()
또는 외부 라이브러리 활용 - 암묵적 타입 변환 지양 → 항상 명시적 변환 사용
NaN
체크 →Number.isNaN()
필수- 무한 루프 방지 →
Infinity
발생 조건 확인 - 큰 정수 연산은
BigInt
사용
'프로그래밍 언어 > 자바스크립트' 카테고리의 다른 글
JavaScript 데이터 타입의 특성, null은 왜 객체인가? (0) | 2025.04.06 |
---|---|
JavaScript에서 큰 숫자를 다루는 방법, BigInt 개념과 활용법 (0) | 2025.03.31 |
JavaScript boolean 타입, 참과 거짓으로 동작하는 웹 애플리케이션 (0) | 2025.03.19 |
null 값 처리, JavaScript 프로그래밍에서 자주 하는 실수 (0) | 2025.03.13 |
JavaScript BigInt, 정수 한계를 넘어선 대형 숫자 처리 (0) | 2025.03.07 |