728x90
자바스크립트에서는 숫자를 표현하는데 한계가 있다.
Number로 수를 표현할 땐 2^53 - 1 이상의 수를 안정적으로 표현하기 어렵다.
때문에 이보다 큰 숫자를 표현할 때는 BigInt로 표현한다.
const num = 123456789;
const BigIntNum = BigInt(123456798789); // 또는 BigInt("123456798789");
const BigIntNumN = 123456798456n;
console.log(typeof num, typeof BigIntNum,typeof BigIntNumN);
// number bigint bigint
BigInt와 Number 타입의 계산은 에러가 발생한다.
const num = 132;
const bigNum = 456n;
console.log(num + bigNum);
// Uncaught TypeError: Cannot mix BigInt and other types, use explicit conversions
console.log(num + Number(bigNum)); // 588
console.log(BigInt(num) + bigNum); // 588n
두 타입간의 계산을 하기 위해서는 위와 같이 형변환이 필요하다.
+, *, -, **, %와 같은 연산자들은 BigInt에서도 사용이 가능하다.
다만, 나눗셈을 하면 소수점 뒤의 자리는 모두 버리게 된다.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/BigInt
- 다만, BigInt는 es2020에서 추가된 문법이고, 그 이전부터 큰 숫자들을 다루는 경우 역시 있었다.
- 또한, es2020을 사용할 수 없는 환경또한 존재할지 모른다.
- 때문에 자바스크립트에서 큰 숫자들을 다루기 위한 다양한 라이브러리들이 존재한다.
- 🍮 bigi, bignumber.js, big.js, bn.js 등
위의 라이브러리중에서 현재 기준으로 가장 다운로드 수가 많은 bn.js를 사용하는 방법에 대해서 알아보았다.
bn.js
다음과 같이 라이브러리를 설치할 수 있다.
npm install --save bn.js
기본적인 사용법은 다음과 같다.
const BN = require("bn.js");
const num1 = new BN("1234567896");
const num2 = new BN("9954542135848972");
const result = num1.add(num2).toString();
console.log(result);
// 9954543370416868
const result2 = num1.sub(num2).toString();
console.log(result2);
// -9954540901281076
N진수로 수를 표현할 수 있으며, 변환 역시 지원한다.
const BN = require("bn.js");
const num = new BN("1001", 2);
console.log(num.toString(10)); // 9
728x90
'JavaScript' 카테고리의 다른 글
자바스크립트에서 싱글톤 패턴 (0) | 2023.03.03 |
---|---|
Blob과 File, FileReader 사용하여 파일(.txt) 읽고 쓰기 (0) | 2023.02.24 |
자바스크립트에서 배열 섞기 알고리즘 (피셔-예이츠 셔플) (0) | 2023.02.18 |
자바스크립트 코드 실행시간 측정하기 (0) | 2023.02.11 |
NPM에 패키지 배포하고 사용해보기 (+ 타입스크립트) (0) | 2023.02.09 |