Kattava opas JavaScriptin BigInt-primitiiviin. Opi käsittelemään suurten lukujen laskentaa, ylläpitämään tarkkuutta Number.MAX_SAFE_INTEGER -arvon ylittävissä luvuissa ja soveltamaan BigIntia globaaleissa sovelluksissa, kuten kryptografiassa ja fintechissä.
JavaScript BigInt-aritmetiikka: Syväsukellus suurten lukujen laskentaan ja tarkkuuden käsittelyyn
Vuosien ajan JavaScript-kehittäjät kohtasivat hiljaisen mutta merkittävän rajoituksen: kyvyttömyyden esittää natiivisti ja tarkasti erittäin suuria kokonaislukuja. Kaikki luvut JavaScriptissä esitettiin perinteisesti IEEE 754 -standardin mukaisina kaksoistarkkuuden liukulukuina, mikä asettaa ylärajan kokonaislukujen tarkkuudelle. Kun laskelmat sisälsivät lukuja, jotka olivat suurempia kuin turvallisesti tallennettavissa olevat, kehittäjien oli turvauduttava kolmannen osapuolen kirjastoihin. Tämä muuttui, kun BigInt esiteltiin ECMAScript 2020:ssä (ES11), mullistavana ominaisuutena, joka toi mielivaltaisen tarkkuuden kokonaisluvut kielen ytimeen.
Tämä kattava opas on suunniteltu globaalille kehittäjäyleisölle. Tutkimme ongelmia, jotka BigInt ratkaisee, kuinka sitä käytetään tarkkaan aritmetiikkaan, sen todellisia sovelluksia esimerkiksi kryptografian ja rahoituksen aloilla sekä yleisimpiä vältettäviä sudenkuoppia. Olitpa rakentamassa fintech-alustaa, tieteellistä simulaatiota tai vuorovaikutuksessa järjestelmien kanssa, jotka käyttävät 64-bittisiä tunnisteita, BigIntin ymmärtäminen on välttämätöntä nykyaikaisessa JavaScript-kehityksessä.
JavaScriptin Number-tyypin lasikatto
Ennen kuin voimme arvostaa ratkaisua, meidän on ensin ymmärrettävä ongelma. JavaScriptin standardi Number-tyyppi, vaikka se onkin monipuolinen, sisältää perustavanlaatuisen rajoituksen kokonaislukujen tarkkuudessa. Tämä ei ole bugi; se on suora seuraus sen suunnittelusta, joka perustuu IEEE 754 -standardiin liukulukuaritmetiikalle.
Number.MAX_SAFE_INTEGER-arvon ymmärtäminen
Number-tyyppi voi turvallisesti esittää kokonaislukuja vain tiettyyn arvoon asti. Tämä kynnysarvo on saatavilla staattisena ominaisuutena: Number.MAX_SAFE_INTEGER.
Sen arvo on 9 007 199 254 740 991, eli 253 - 1. Miksi juuri tämä luku? Kaksoistarkkuuden liukuluvussa käytetyistä 64 bitistä 52 bittiä on varattu mantissalle (merkitsevät numerot), yksi bitti etumerkille ja 11 bittiä eksponentille. Tämä rakenne mahdollistaa erittäin laajan arvoalueen, mutta rajoittaa kokonaislukujen yhtäjaksoista, aukotonta esitystapaa.
Katsotaan, mitä tapahtuu, kun yritämme ylittää tämän rajan:
const maxSafeInt = Number.MAX_SAFE_INTEGER;
console.log(maxSafeInt); // 9007199254740991
const oneMore = maxSafeInt + 1;
console.log(oneMore); // 9007199254740992
const twoMore = maxSafeInt + 2;
console.log(twoMore); // 9007199254740992 - Oho!
console.log(oneMore === twoMore); // true
Kuten näet, kun ylitämme kynnyksen, lukujärjestelmä menettää kykynsä esittää jokaista peräkkäistä kokonaislukua. maxSafeInt + 1 ja maxSafeInt + 2 saavat saman arvon. Tämä hiljainen tarkkuuden menetys voi johtaa katastrofaalisiin bugeihin sovelluksissa, jotka ovat riippuvaisia tarkasta kokonaislukuaritmetiikasta, kuten rahoituslaskelmissa tai suurten tietokanta-ID:iden käsittelyssä.
Milloin tällä on väliä?
Tämä rajoitus ei ole vain teoreettinen kuriositeetti. Sillä on merkittäviä todellisia seurauksia:
- Tietokantojen ID-tunnisteet: Monet nykyaikaiset tietokantajärjestelmät, kuten PostgreSQL, käyttävät 64-bittistä kokonaislukutyyppiä (
BIGINT) pääavaimina. Nämä ID:t voivat helposti ylittääNumber.MAX_SAFE_INTEGER-arvon. Kun JavaScript-asiakasohjelma hakee tämän ID:n, se voi pyöristyä virheellisesti, mikä johtaa tietojen vioittumiseen tai kyvyttömyyteen hakea oikeaa tietuetta. - API-integraatiot: Palvelut, kuten Twitter (nykyisin X), käyttävät 64-bittisiä kokonaislukuja, joita kutsutaan "Snowflakeiksi", twiittien ID-tunnisteina. Näiden ID:iden oikea käsittely JavaScript-frontendissä vaatii erityistä huolellisuutta.
- Kryptografia: Kryptografiset operaatiot sisältävät usein laskutoimituksia erittäin suurilla alkuluvuilla, jotka ylittävät reilusti standardin
Number-tyypin kapasiteetin. - Suuren tarkkuuden aikaleimat: Jotkut järjestelmät tarjoavat aikaleimoja nanosekunnin tarkkuudella, jotka esitetään usein 64-bittisenä kokonaislukuna tietystä epookista. Tämän tallentaminen standardiin
Number-tyyppiin leikkaisi sen tarkkuutta.
Esittelyssä BigInt: Ratkaisu mielivaltaisen tarkkuuden kokonaisluvuille
BigInt esiteltiin nimenomaan tämän ongelman ratkaisemiseksi. Se on erillinen numeerinen primitiivityyppi JavaScriptissä, joka voi esittää kokonaislukuja mielivaltaisella tarkkuudella. Tämä tarkoittaa, että BigInt ei ole rajoitettu kiinteään bittimäärään; se voi kasvaa tai kutistua vastaamaan sisältämäänsä arvoa, rajoitteenaan vain isäntäjärjestelmän käytettävissä oleva muisti.
BigInt-arvon luominen
BigInt-arvon voi luoda kahdella päätavalla:
- Liittämällä
n-kirjain kokonaislukulitraalin perään: Tämä on yksinkertaisin ja yleisin tapa. - Käyttämällä
BigInt()-konstruktorifunktiota: Tämä on hyödyllinen, kun muunnetaan merkkijonoja tai Number-tyyppejä BigInt-arvoiksi.
Tässä muutamia esimerkkejä:
// 'n'-liitteen käyttö
const aLargeNumber = 9007199254740991n;
const anEvenLargerNumber = 1234567890123456789012345678901234567890n;
// BigInt()-konstruktorin käyttö
const fromString = BigInt("98765432109876543210");
const fromNumber = BigInt(100); // Luo 100n
// Varmistetaan niiden tyyppi
console.log(typeof aLargeNumber); // "bigint"
console.log(typeof fromString); // "bigint"
Tärkeä huomautus: Et voi käyttää new-operaattoria BigInt()-funktion kanssa, koska se on primitiivityyppi, ei objekti. new BigInt() heittää TypeError-virheen.
Perusaritmetiikka BigIntillä
BigInt tukee tuttuja aritmeettisia operaattoreita, mutta ne toimivat tiukasti kokonaislukujen maailmassa.
Yhteen-, vähennys- ja kertolasku
Nämä operaattorit toimivat juuri niin kuin odotat, mutta niillä on kyky käsitellä valtavia lukuja menettämättä tarkkuutta.
const num1 = 12345678901234567890n;
const num2 = 98765432109876543210n;
// Yhteenlasku
console.log(num1 + num2); // 111111111011111111100n
// Vähennyslasku
console.log(num2 - num1); // 86419753208641975320n
// Kertolasku
console.log(num1 * 2n); // 24691357802469135780n
Jakolasku (/)
Tässä BigIntin toiminta eroaa merkittävästi tavallisesta Number-jakolaskusta. Koska BigIntit voivat esittää vain kokonaislukuja, jakolaskun tulos katkaistaan aina kohti nollaa (desimaaliosa hylätään).
const dividend = 10n;
const divisor = 3n;
console.log(dividend / divisor); // 3n (ei 3.333...)
const negativeDividend = -10n;
console.log(negativeDividend / divisor); // -3n
// Vertailun vuoksi Number-jakolasku
console.log(10 / 3); // 3.3333333333333335
Tämä vain kokonaisluvuilla toimiva jakolasku on ratkaisevan tärkeä. Jos sinun täytyy suorittaa laskelmia, jotka vaativat desimaalitarkkuutta, BigInt ei ole oikea työkalu. Silloin on turvauduttava kirjastoihin, kuten `Decimal.js`, tai hallittava desimaaliosaa manuaalisesti (esimerkiksi työskentelemällä pienimmän valuuttayksikön kanssa rahoituslaskelmissa).
Jakojäännös (%) ja potenssiin korotus (**)
Jakojäännösoperaattori (%) ja potenssiin korotusoperaattori (**) toimivat myös odotetusti BigInt-arvojen kanssa.
console.log(10n % 3n); // 1n
console.log(-10n % 3n); // -1n
// Potenssiin korotus voi luoda todella massiivisia lukuja
const base = 2n;
const exponent = 100n;
const hugeNumber = base ** exponent;
console.log(hugeNumber); // 1267650600228229401496703205376n
Tiukka sääntö: Älä sekoita BigInt- ja Number-tyyppejä
Yksi tärkeimmistä säännöistä BigIntin kanssa työskennellessä on, että et voi sekoittaa BigInt- ja Number-operandia useimmissa aritmeettisissa operaatioissa. Tämän yrittäminen johtaa TypeError-virheeseen.
Tämä suunnitteluvalinta oli tarkoituksellinen. Se estää kehittäjiä vahingossa menettämästä tarkkuutta, kun BigInt pakotetaan implisiittisesti Number-tyypiksi. Kieli pakottaa sinut olemaan selkeä aikeistasi.
const myBigInt = 100n;
const myNumber = 50;
try {
const result = myBigInt + myNumber; // Tämä epäonnistuu
} catch (error) {
console.error(error); // TypeError: Cannot mix BigInt and other types, use explicit conversions
}
Oikea lähestymistapa: Eksplisiittinen muunnos
Suorittaaksesi operaation BigIntin ja Numberin välillä, sinun on eksplisiittisesti muunnettava toinen toisen tyypiksi.
const myBigInt = 100n;
const myNumber = 50;
// Muunna Number BigIntiksi
const result1 = myBigInt + BigInt(myNumber);
console.log(result1); // 150n
// Muunna BigInt Numberiksi (käytä varoen!)
const result2 = Number(myBigInt) + myNumber;
console.log(result2); // 150
Varoitus: BigIntin muuntaminen Numberiksi Number()-funktiolla on vaarallista, jos BigIntin arvo on turvallisen kokonaislukualueen ulkopuolella. Tämä voi palauttaa juuri ne tarkkuusvirheet, joita BigInt on suunniteltu estämään.
const veryLargeBigInt = 9007199254740993n;
const convertedToNumber = Number(veryLargeBigInt);
console.log(veryLargeBigInt); // 9007199254740993n
console.log(convertedToNumber); // 9007199254740992 - Tarkkuus menetetty!
Yleissääntö on: jos työskentelet mahdollisesti suurten kokonaislukujen kanssa, pysy BigInt-ekosysteemissä kaikissa laskelmissasi. Muunna takaisin Numberiksi vain, jos olet varma, että arvo on turvallisella alueella.
Vertailu- ja loogiset operaattorit
Vaikka aritmeettiset operaattorit ovat tiukkoja tyyppien sekoittamisen suhteen, vertailu- ja loogiset operaattorit ovat sallivampia.
Rationaaliset vertailut (>, <, >=, <=)
Voit turvallisesti verrata BigInt-arvoa Number-arvoon. JavaScript hoitaa niiden matemaattisten arvojen vertailun oikein.
console.log(10n > 5); // true
console.log(10n < 20); // true
console.log(100n >= 100); // true
console.log(99n <= 100); // true
Yhtäsuuruus (== vs. ===)
Löyhän yhtäsuuruuden (==) ja tiukan yhtäsuuruuden (===) ero on erittäin tärkeä BigIntin kanssa.
- Tiukka yhtäsuuruus (
===) tarkistaa sekä arvon että tyypin. KoskaBigIntjaNumberovat eri tyyppejä,10n === 10on aina false. - Löyhä yhtäsuuruus (
==) suorittaa tyyppipakotuksen. Se pitää lauseketta10n == 10tosi-arvona, koska niiden matemaattiset arvot ovat samat.
console.log(10n == 10); // true
console.log(10n === 10); // false (eri tyyppejä)
console.log(10n === 10n); // true (sama arvo ja tyyppi)
Selkeyden ja odottamattoman käytöksen välttämiseksi on usein parasta käyttää tiukkaa yhtäsuuruutta ja varmistaa, että vertailet samantyyppisiä arvoja.
Boolen konteksti
Kuten Number-arvoja, myös BigInt-arvoja voidaan arvioida boolean-kontekstissa (esim. if-lauseessa). Arvo 0n katsotaan epätodeksi (falsy), kun taas kaikki muut BigInt-arvot (positiiviset tai negatiiviset) katsotaan tosiksi (truthy).
if (0n) {
// Tämä koodi ei suoritu
} else {
console.log("0n on falsy");
}
if (1n && -10n) {
console.log("Nollasta poikkeavat BigInt-arvot ovat truthy");
}
BigIntin käytännön sovellukset globaalissa kontekstissa
Nyt kun ymmärrämme mekaniikan, tutkitaan, missä BigInt loistaa todellisissa, kansainvälisissä sovelluksissa.
1. Finanssiteknologia (FinTech)
Liukulukuaritmetiikka on tunnetusti ongelmallista rahoituslaskelmissa pyöristysvirheiden vuoksi. Yleinen globaali käytäntö on esittää rahalliset arvot pienimmän valuuttayksikön kokonaislukuina (esim. sentteinä USD:lle, jeneinä JPY:lle, satosheina Bitcoinille).
Vaikka tavalliset Number-arvot saattavat riittää pienemmille summille, BigIntistä tulee korvaamaton, kun käsitellään suuria transaktioita, kokonaissummia tai kryptovaluuttoja, joihin liittyy usein erittäin suuria lukuja.
// Suuren siirron esittäminen pienimmässä yksikössä (esim. Wei Ethereumille)
const walletBalance = 1234567890123456789012345n; // Suuri määrä Wei-yksiköitä
const transactionAmount = 9876543210987654321n;
const newBalance = walletBalance - transactionAmount;
console.log(`Uusi saldo: ${newBalance.toString()} Wei`);
// Uusi saldo: 1224691346912369134691246 Wei
BigIntin käyttö varmistaa, että jokainen yksittäinen yksikkö otetaan huomioon, eliminoiden pyöristysvirheet, joita liukulukumatematiikassa voisi esiintyä.
2. Kryptografia
Nykyaikainen kryptografia, kuten RSA-algoritmi, jota käytetään TLS/SSL-salauksessa kaikkialla verkossa, perustuu aritmetiikkaan erittäin suurilla alkuluvuilla. Nämä luvut ovat usein 2048-bittisiä tai suurempia, ylittäen reilusti JavaScriptin Number-tyypin kyvyt.
BigIntin avulla kryptografisia algoritmeja voidaan nyt toteuttaa tai polyfillata suoraan JavaScriptissä, mikä mahdollistaa uusia mahdollisuuksia selaimen sisäisille tietoturvatyökaluille ja WebAssembly-pohjaisille sovelluksille.
3. 64-bittisten tunnisteiden käsittely
Kuten aiemmin mainittiin, monet hajautetut järjestelmät ja tietokannat generoivat 64-bittisiä yksilöllisiä tunnisteita. Tämä on yleinen malli suurten mittakaavojen järjestelmissä, joita kehittävät yritykset maailmanlaajuisesti.
Ennen BigIntiä JavaScript-sovellusten, jotka käyttivät näitä tunnisteita palauttavia API-rajapintoja, oli käsiteltävä niitä merkkijonoina tarkkuuden menetyksen välttämiseksi. Tämä oli hankala kiertotapa.
// API-vastaus 64-bittisellä käyttäjä-ID:llä
const apiResponse = '{"userId": "1143534363363377152", "username": "dev_user"}';
// Vanha tapa (jäsentäminen merkkijonoksi)
const userDataString = JSON.parse(apiResponse);
console.log(userDataString.userId); // "1143534363363377152"
// Kaikki matematiikka vaatisi kirjaston tai merkkijonojen käsittelyä.
// Uusi tapa (mukautetulla reviver-funktiolla ja BigIntillä)
const userDataBigInt = JSON.parse(apiResponse, (key, value) => {
// Yksinkertainen tarkistus potentiaalisten ID-kenttien muuntamiseksi BigIntiksi
if (key === 'userId' && typeof value === 'string' && /^[0-9]+$/.test(value)) {
return BigInt(value);
}
return value;
});
console.log(userDataBigInt.userId); // 1143534363363377152n
console.log(typeof userDataBigInt.userId); // "bigint"
BigIntin avulla nämä ID:t voidaan esittää niiden oikealla numeerisella tyypillä, mikä mahdollistaa oikean lajittelun, vertailun ja tallennuksen.
4. Tieteellinen ja matemaattinen laskenta
Sellaiset alat kuten lukuteoria, kombinatoriikka ja fysiikan simulaatiot vaativat usein laskelmia, jotka tuottavat Number.MAX_SAFE_INTEGER -arvoa suurempia kokonaislukuja. Esimerkiksi suurten kertomien tai Fibonaccin sarjan termien laskeminen on helppoa BigIntin avulla.
function factorial(n) {
// Käytä BigInt-arvoja alusta alkaen
let result = 1n;
for (let i = 2n; i <= n; i++) {
result *= i;
}
return result;
}
// Laske luvun 50 kertoma
const fact50 = factorial(50n);
console.log(fact50.toString());
// 30414093201713378043612608166064768844377641568960512000000000000n
Edistyneet aiheet ja yleiset sudenkuopat
Vaikka BigInt on tehokas työkalu, on olemassa useita vivahteita ja mahdollisia ongelmia, joista on syytä olla tietoinen.
JSON-serialisointi: Merkittävä kompastuskivi
Merkittävä haaste syntyy, kun yrität serialisoida objektia, joka sisältää BigInt-arvon, JSON-merkkijonoksi. Oletuksena `JSON.stringify()` heittää `TypeError`-virheen, kun se kohtaa BigIntin.
const data = {
id: 12345678901234567890n,
status: "active"
};
try {
JSON.stringify(data);
} catch (error) {
console.error(error); // TypeError: Do not know how to serialize a BigInt
}
Tämä johtuu siitä, että JSON-määrityksessä ei ole tietotyyppiä mielivaltaisen suurille kokonaisluvuille, ja hiljainen muunnos standardinumeroksi voisi johtaa tarkkuuden menetykseen. Tämän käsittelemiseksi sinun on tarjottava mukautettu serialisointistrategia.
Ratkaisu 1: Toteuta `toJSON`-metodi
Voit lisätä `toJSON`-metodin `BigInt.prototype`-objektiin. `JSON.stringify()` kutsuu tätä metodia automaattisesti.
// Lisää tämä sovelluksesi alustustiedostoon
BigInt.prototype.toJSON = function() {
return this.toString();
};
const data = { id: 12345678901234567890n, status: "active" };
const jsonString = JSON.stringify(data);
console.log(jsonString); // "{"id":"12345678901234567890","status":"active"}"
Ratkaisu 2: Käytä `replacer`-funktiota
Jos et halua muokata globaalia prototyyppiä, voit antaa `replacer`-funktion `JSON.stringify()`-metodille.
const replacer = (key, value) => {
if (typeof value === 'bigint') {
return value.toString();
}
return value;
};
const data = { id: 12345678901234567890n, status: "active" };
const jsonString = JSON.stringify(data, replacer);
console.log(jsonString); // "{"id":"12345678901234567890","status":"active"}"
Muista, että tarvitset myös vastaavan `reviver`-funktion käyttäessäsi `JSON.parse()`-metodia muuntaaksesi merkkijonoesityksen takaisin BigIntiksi, kuten aiemmin 64-bittisen ID:n esimerkissä näytettiin.
Binaarioperaatiot
BigInt tukee myös bittioperaatioita (`&`, `|`, `^`, `~`, `<<`, `>>`), jotka käsittelevät BigIntiä bittijonona kahden komplementin esitysmuodossa. Tämä on erittäin hyödyllistä matalan tason datan manipuloinnissa, binääriprotokollien jäsentämisessä tai tiettyjen algoritmien toteuttamisessa.
const mask = 0b1111n; // 4-bittinen maski
const value = 255n; // 0b11111111n
// Bittikohtainen JA (AND)
console.log(value & mask); // 15n (joka on 0b1111n)
// Siirto vasemmalle
console.log(1n << 64n); // 18446744073709551616n (2^64)
Huomaa, että etumerkitöntä oikealle siirto -operaattoria (`>>>`) ei tueta BigIntille, koska jokainen BigInt on etumerkillinen.
Suorituskykyyn liittyvät huomiot
Vaikka BigInt on tehokas työkalu, se ei ole suora korvike Number-tyypille. BigInt-operaatiot ovat yleensä hitaampia kuin vastaavat Number-operaatiot, koska ne vaativat monimutkaisempaa, muuttuvapituista muistin varaamista ja laskentalogiikkaa. Standardiaritmetiikassa, joka mahtuu mukavasti turvalliseen kokonaislukualueeseen, sinun tulisi jatkaa Number-tyypin käyttöä optimaalisen suorituskyvyn saavuttamiseksi.
Nyrkkisääntö on yksinkertainen: Käytä Number-tyyppiä oletuksena. Vaihda BigInt-tyyppiin vain, kun tiedät käsitteleväsi kokonaislukuja, jotka saattavat ylittää Number.MAX_SAFE_INTEGER -arvon.
Selain- ja ympäristötuki
BigInt on osa ES2020-standardia ja sitä tuetaan laajasti kaikissa moderneissa verkkoselaimissa (Chrome, Firefox, Safari, Edge) ja palvelinympäristöissä, kuten Node.js (versio 10.4.0 ja uudemmat). Se ei kuitenkaan ole saatavilla vanhemmissa selaimissa, kuten Internet Explorerissa. Jos sinun täytyy tukea vanhoja ympäristöjä, sinun on edelleen turvauduttava kolmannen osapuolen suurten lukujen kirjastoihin ja mahdollisesti käytettävä transpilaattoria, kuten Babelia, joka voi tarjota polyfillin.
Globaalille yleisölle on aina viisasta tarkistaa yhteensopivuusresurssi, kuten "Can I Use...", varmistaaksesi, että kohdekäyttäjäkuntasi voi suorittaa koodisi ongelmitta.
Johtopäätös: Uusi rajapyykki JavaScriptille
BigIntin käyttöönotto merkitsee JavaScript-kielen merkittävää kypsymistä. Se vastaa suoraan pitkäaikaiseen rajoitukseen ja antaa kehittäjille mahdollisuuden rakentaa uuden luokan sovelluksia, jotka vaativat suurta tarkkuutta kokonaislukuaritmetiikassa. Tarjoamalla natiivin, sisäänrakennetun ratkaisun, BigInt poistaa tarpeen ulkoisille kirjastoille monissa yleisissä käyttötapauksissa, mikä johtaa puhtaampaan, tehokkaampaan ja turvallisempaan koodiin.
Tärkeimmät opit globaaleille kehittäjille:
- Käytä BigIntiä kokonaisluvuille, jotka ylittävät 253 - 1: Aina kun sovelluksesi saattaa käsitellä
Number.MAX_SAFE_INTEGER-arvoa suurempia kokonaislukuja, käytä BigIntiä tarkkuuden takaamiseksi. - Ole tarkka tyyppien kanssa: Muista, että et voi sekoittaa
BigInt- jaNumber-tyyppejä aritmeettisissa operaatioissa. Suorita aina eksplisiittiset muunnokset ja ole tietoinen mahdollisesta tarkkuuden menetyksestä, kun muunnat suuren BigInt-arvon takaisin Numberiksi. - Hallitse JSON-käsittely: Ole valmis käsittelemään
TypeError-virhettä, joka tuleeJSON.stringify()-metodista. Toteuta vankka serialisointi- ja deserialisointistrategia käyttämällä `toJSON`-metodia tai `replacer`/`reviver`-paria. - Valitse oikea työkalu oikeaan tehtävään: BigInt on vain kokonaisluvuille. Mielivaltaisen tarkkuuden desimaaliaritmetiikkaan kirjastot, kuten `Decimal.js`, ovat edelleen sopiva valinta. Käytä
Number-tyyppiä kaikissa muissa ei-kokonaisluku- tai pienissä kokonaislukulaskelmissa suorituskyvyn ylläpitämiseksi.
Ottamalla BigIntin käyttöön kansainvälinen JavaScript-yhteisö voi nyt luottavaisin mielin tarttua rahoituksen, tieteen, datan eheyden ja kryptografian haasteisiin, työntäen rajoja sille, mikä on mahdollista verkossa ja sen ulkopuolella.