1. 概要
- BigInt(長整数) は非常に大きな整数を扱うための型。末尾に
nを付けるかBigInt(...)を使って作る。 - Number(通常の数値) は倍精度浮動小数点で、整数でも小数でも扱えるが、整数部分は最大で
2^53-1(Number.MAX_SAFE_INTEGER)まで安全に扱える。これを超えると丸め・精度の問題が起きる。 - BigInt と Number を直接混ぜて算術演算(
+,-,*,/等)をするとエラーになる。(型が違うため)
2. エラーの例(初心者向け)
console.log(152n + 38); // ← ここで TypeError が出る(BigInt と Number を混ぜている)
JavaScriptこのエラーは「BigInt と他の型(Number 等)を混ぜている。明示的な変換を使え」という意味です。
3. 型をそろえる(変換)の方法と注意点
A. BigInt → Number
使い方(シンプル):
let b = 1033n;
let n = Number(b); // 1033 (Number 型)
let n2 = parseInt(b); // 1033(parseInt は一度文字列にしてから解析する)
JavaScriptNumber(...) が最もわかりやすく確実です。parseInt(...) も動きますが、parseInt は本来「文字列→整数」を想定した関数で、radix(基数)や文字列の扱いに注意が必要です(念のため Number() 推奨)。
重要な注意:BigInt を Number に変換するときは、変換後の値が Number.MAX_SAFE_INTEGER の範囲内か(負側も同様に Number.MIN_SAFE_INTEGER)を確認してください。それを超えると精度(整数の正確さ)が失われる可能性があります。
B. Number → BigInt
使い方:
let n = 842;
let b = BigInt(n); // 842n
JavaScriptBigInt(...)を使えば Number から BigInt に変換できます。- ただし
BigInt()は整数しか受け付けません。BigInt(123.3)のように小数を渡すとエラー(RangeError)になります。整数であることをNumber.isIntegerなどで確認してから変換しましょう。
4. 初心者が覚えておくべき実務ルール(チェックリスト)
- 「大きくなりうる整数(例:ID、台帳の残高など)」を扱うなら 最初から BigInt で揃える。途中で混ぜない。
- 小さな数(普通の計算)なら Number で OK。BigInt に変換すると小数は失う/エラーになるので注意。d
- BigInt → Number 変換は 必ず
Number.MAX_SAFE_INTEGERの範囲を確認する(範囲外なら変換しないか別の扱いにする)。 parseIntは動くが意図せぬ挙動になることがあるので、BigInt→Number の変換はNumber()を優先。
5. すぐ使える「安全ユーティリティ」例
以下は実務でよく役立つ小さな関数セット(そのままコピペして使えます)。
// BigInt を安全に Number に変換(範囲外なら例外)
function bigIntToNumberSafe(b) {
if (typeof b !== 'bigint') throw new TypeError('bigIntToNumberSafe: 引数は bigint である必要があります');
const MAX = BigInt(Number.MAX_SAFE_INTEGER);
const MIN = BigInt(Number.MIN_SAFE_INTEGER);
if (b > MAX || b < MIN) {
throw new RangeError('変換すると精度が失われます: Number の安全範囲を超えています');
}
return Number(b);
}
// Number を安全に BigInt に変換(小数や NaN はエラー)
function numberToBigIntSafe(n) {
if (typeof n !== 'number' || !Number.isFinite(n)) throw new TypeError('numberToBigIntSafe: 有限な number を渡してください');
if (!Number.isInteger(n)) throw new RangeError('numberToBigIntSafe: 小数は BigInt に変換できません');
return BigInt(n);
}
// BigInt と Number を受け取って「安全に」足し算する例
function addMixedSafe(a, b) {
if (typeof a === typeof b) return a + b; // 両方 number か両方 bigint の場合そのまま
// 片方が bigint, 片方が number の場合。number が整数かつ安全かをチェックして bigint にするパターン
if (typeof a === 'bigint' && typeof b === 'number') {
if (!Number.isInteger(b)) throw new RangeError('小数を BigInt と混ぜられません');
return a + BigInt(b); // 戻りは bigint
}
if (typeof a === 'number' && typeof b === 'bigint') {
if (!Number.isInteger(a)) throw new RangeError('小数を BigInt と混ぜられません');
return BigInt(a) + b; // 戻りは bigint
}
throw new TypeError('対応していない型です');
}
JavaScriptこれらの関数は「明示的に失敗させる(例外を投げる)」ことで、知らぬ間に精度が失われる事故を防ぎます。実運用では try...catch で扱ったり、戻り値をどちらの型に揃えるか(Number にするか BigInt にするか)を設計段階で決めておくと良いです。
まとめ
BigInt と Number は別物。混ぜるとエラーになるので、計算前に型をそろえる。
- BigInt→Number は
Number()(ただしMAX_SAFE_INTEGERを超えると精度を失う)。 - Number→BigInt は
BigInt()(整数のみ)。

