JavaScript에서 아주 큰 숫자를 안전하게 저장하려면 + 연산자 대신 BigInt()를 사용해야 합니다. + 연산자로 문자열을 숫자로 변환하면 Number 타입의 한계 때문에 정밀도 손실(precision loss)이 발생할 수 있습니다.
JavaScript의 Number 타입은 IEEE 754 배정밀도 부동소수점 방식을 사용하며, 안전하게 표현할 수 있는 최대 정수는 2^53 − 1(약 9,007조)입니다. 이 범위를 초과하는 값은 뒤쪽 자릿수가 부정확해질 수 있습니다. 반면 BigInt는 임의의 크기를 가진 정수를 정확하게 표현할 수 있어 큰 숫자 처리에 적합합니다.
예제
다음은 큰 숫자를 BigInt()로 저장하고 + 연산자와 비교하는 코드입니다 −
var stringValue1="100";
console.log("정수 값=");
console.log(+stringValue1);
var stringValue2="2312123211345545367";
console.log("+ 연산자 사용 시 정밀도 손실 발생..")
console.log(+stringValue2);
const storeLongInteger=BigInt("2312123211345545367");
console.log("BigInt() 사용 시 정밀도 손실 없음");
console.log(storeLongInteger);
위 프로그램을 실행하려면 다음 명령어를 사용하세요 −
node fileName.js.
여기서는 파일 이름이 demo212.js라고 가정합니다.
출력 결과
콘솔에 출력되는 결과는 다음과 같습니다 −
PS C:\Users\Amit\JavaScript-code> node demo213.js
정수 값=
100
+ 연산자 사용 시 정밀도 손실 발생..
2312123211345545000
BigInt() 사용 시 정밀도 손실 없음
2312123211345545367n
출력 결과를 보면, + 연산자로 변환한 "2312123211345545367"은 마지막 세 자리가 000으로 바뀌면서 정밀도가 손실된 것을 확인할 수 있습니다. 반면 BigInt()로 저장한 값은 원래 숫자 그대로 정확하게 유지되며, 값 끝에 'n' 접미사가 붙어 BigInt 타입임을 나타냅니다. 따라서 금융 계산, 고유 ID 처리 등 큰 정수를 다뤄야 하는 상황에서는 반드시 BigInt()를 사용하는 것이 좋습니다.