프로그래머스 문제를 풀다가 Number 혹은 parseInt로 변환되지 않는 큰 정수를 발견했다.
자바스크립트에서는 안전한 정수의 범위를 넘어가면 부동 소수점 산술을 사용할 때 예상치 못한 결과가 나올 수 있다고 한다.
Javascript는 IEEE 754 표준을 사용하여 숫자를 표현하며, 정밀도에 제한이 있다.
console.log(Number.MAX_SAFE_INTEGER); // 9007199254740991
해결 방법으로는 ES2020에서 도입된 BigInt를 사용할 수 있다.
아주 큰 정수 숫자 표현을 위해 자바스크립트에서 제공하는 제한없는 숫자 타입이다.
선언 방법
const bigInteger = 123n;
산술 연산
BigInt
**는 일반적인 산술 연산자를 사용하여 연산이 가능하다javascriptCopy code
const a = 123n;
const b = 456n;
const sum = a + b;
const product = a * b;
비교 연산
BigInt
**는 ===
, !==
, <
, >
, <=
, **>=
**와 같은 비교 연산자를 사용하여 비교할 수 있다.javascriptCopy code
const a = 123n;
const b = 456n;
console.log(a < b); // true
형 변환
BigInt
**와 일반 숫자 간에는 형 변환이 필요.javascriptCopy code
const a = 123n;
const b = 456;
const sum = a + BigInt(b);
주의 사항
BigInt
**는 **Number
**와 다르게 상수로 사용되지 않으며, 함수 내에서만 사용 가능하다.javascriptCopy code
function add(a, b) {
return a + b; // 에러! BigInt로 변환 필요
}
add(123n, 456n); // 올바른 사용