【JS応用|豆知識】JavaScriptで巨大な数値を扱う!BigIntリテラルの基本と活用術

導入:なぜBigIntが必要なのか

JavaScriptで数値を扱う際、通常は「Number」型を使用しますが、これには「約9007兆(2の53乗-1)」という上限値(Number.MAX_SAFE_INTEGER)が存在します。この制限を超えると、数値の精度が失われ、計算結果が不正確になるという課題が発生します。そこで登場するのが「BigInt」です。BigIntを使用すれば、メモリが許す限りどれほど巨大な整数でも正確に計算できるため、金融系のシステムや暗号技術、高精度なカウント処理において非常に重要です。

基礎知識:BigIntリテラルとは

BigIntは、JavaScriptにおけるプリミティブな数値型の一つです。従来のNumber型と異なり、整数のみを扱います。BigIntを使用するための最も直感的で効率的な方法が「BigIntリテラル」です。数値の末尾に「n」を付けるだけで、その数値はBigInt型として認識されます。例えば、100nと記述すれば、それはNumber型の100ではなく、BigInt型の100として扱われます。

実装:BigIntリテラルの書き方

BigIntを生成する方法はいくつかありますが、リテラルを使うのが最も簡潔です。注意点として、BigInt型はNumber型と直接演算(足し算や掛け算など)を行うことができません。必ず型を統一する必要があります。

サンプルプログラム

以下のコードをブラウザのコンソールやNode.jsで実行して、その挙動を確認してみてください。

// 1. BigIntリテラルの宣言
const bigNum = 9007199254740991n; 

// 2. 巨大な数値同士の計算も正確に行えます
const result = bigNum + 10n;
console.log("計算結果:", result); // 9007199254741001n

// 3. 注意点:Number型との混在はエラーになります
const num = 10;
try {
  // console.log(bigNum + num); // これはTypeErrorになります
  
  // 解決策:明示的に型変換を行う
  const safeResult = bigNum + BigInt(num);
  console.log("型変換後の計算:", safeResult);
} catch (e) {
  console.error("エラーが発生しました:", e.message);
}

// 4. JSONへの変換について(補足)
// BigIntはJSON.stringifyでそのまま変換できないため、文字列化が必要です
const jsonString = JSON.stringify({ value: bigNum.toString() });
console.log("JSON文字列:", jsonString);

応用・注意点:現場で陥りやすい罠

実務でBigIntを扱う際に最も注意すべき点は、「JSONとの相性」です。JSON標準にはBigIntという型が存在しないため、API通信などでBigIntをそのまま送信しようとするとエラーが発生します。解決策として、上記サンプルのように一度「.toString()」で文字列に変換して送受信し、受け取り側で「BigInt(値)」として復元するのが一般的です。

また、小数点以下の計算には使えないことも忘れないでください。BigIntはあくまで「整数」専用です。割り算を行った場合、小数点以下は切り捨てられる(0.5なら0になる)という仕様も、バグの温床になりやすいため十分注意して設計しましょう。正しい場面で適切にBigIntを選択することで、数値精度の悩みを解消した堅牢なアプリケーションを構築できます。

タイトルとURLをコピーしました