저장을 습관화

자바스크립트 - BigInt, 2^53 이상의 숫자를 표현할 때 본문

공부/JavaScript

자바스크립트 - BigInt, 2^53 이상의 숫자를 표현할 때

ctrs 2023. 9. 30. 19:01

자바스크립트가 기본적으로 지원하는 숫자, Number의 범위는 

-(2^53)-1 ~ 2^53-1 까지이다.

console.log(Number.MAX_SAFE_INTEGER); // 9007199254740991
console.log(Number.MIN_SAFE_INTEGER); // -9007199254740991

 

수가 이보다 커지면

'절대값이 2^53보다 크거나 같은 숫자 리터럴은 너무 커서 정수로 정확하게 표시할 수 없다' 라는 메세지가 나오며

 

입력한 숫자가 제대로 계산되지 못하는 에러가 발생하게 된다.

console.log(18446744073709551615); // 18446744073709552000
console.log(287346502836570928366); // 287346502836570900000

console.log(18446744073709551615 + 287346502836570928366); // 305793246910280500000

 

이럴때 사용하는 것이 BigInt이다.

 

사용법

정수 리터럴의 뒤에 n을 붙이거나, 함수 BigInt()를 호출하여 생성한다.

console.log(18446744073709551615); // 18446744073709552000
console.log(18446744073709551615n); // 18446744073709551615n
console.log(BigInt(18446744073709551615)); // 18446744073709551616n

console.log(18446744073709551615n); // 18446744073709551615n
console.log(287346502836570928366n); // 287346502836570928366n

console.log(18446744073709551615n + 287346502836570928366n); // 305793246910280479981n

 

 

주의점 1. 

BigInt로 표시한 숫자가 Number로 표시한 숫자와 다른 경우가 발생할 수 있다

console.log(18446744073709551615); // 18446744073709552000

console.log(18446744073709551615n); // 18446744073709551615n

console.log(BigInt(18446744073709551615)); // 18446744073709551616n <- 기본 수보다 1 크다

 

주의점 2.

BigInt로 표기한 숫자는 Bigint로 표기한 숫자 끼리만 연산할 수 있다

console.log(BigInt(18446744073709551615) + 1);

 

console.log(BigInt(18446744073709551615) + BigInt(1)); // 18446744073709551617n
console.log(18446744073709551615n + 1n); // 18446744073709551616n

 

 

 

[참조]

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/BigInt

 

BigInt - JavaScript | MDN

BigInt 는 Number 원시 값이 안정적으로 나타낼 수 있는 최대치인 2^53 - 1보다 큰 정수를 표현할 수 있는 내장 객체입니다.

developer.mozilla.org

https://mytutorials.tistory.com/199

 

Javascript 의 숫자 범위 (2의 53승 - 1) ~ -(2의 53승 - 1)

ouoiouoi.blogspot.com/2017/05/javascript-number.html Javascript Number 범위 Javascript에는 정수형 소수형 구분이 없이 Number라는 자료형 밖에 없다. Number 자료형도 범위가 있을텐데 ECMA Script 명세에는 IEEE 754-2008 포

mytutorials.tistory.com

https://sisiblog.tistory.com/242

 

[javascript] 자바스크립트 Number 타입 사용 방법

참고: https://www.javascripttutorial.net/javascript-number/ 이 튜토리얼에서는 javascript 숫자 유형과 이를 효과적으로 사용하는 방법에 대해 알아보겠습니다. Javascript의 Number 소개 javascript는 number 유형을 사

sisiblog.tistory.com

https://ctrs.tistory.com/398

 

프로그래머스 LV.0 두 수의 합

프로그래머스 LV.0 두 수의 합 https://school.programmers.co.kr/learn/courses/30/lessons/181846 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록

ctrs.tistory.com