この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:4
ページ更新者:guest
更新日時:2026-06-11 07:10:02

タイトル: Number
SEOタイトル: JavaScript Number オブジェクト完全ガイド(プロパティ / メソッド / 浮動小数点の注意 / BigInt)

この記事の要点
  • Number は JavaScript の数値プリミティブをラップするビルトインオブジェクト
  • 内部表現はIEEE 754 倍精度浮動小数点 (64bit)。安全な整数範囲は -(2^53-1) 〜 2^53-1
  • 主要プロパティ: Number.MAX_SAFE_INTEGER / EPSILON / POSITIVE_INFINITY / NaN
  • 主要メソッド: toFixed() / toString() / toExponential() / Number.isInteger() / Number.isFinite()
  • 注意: 0.1 + 0.2 !== 0.3。比較は Math.abs(a-b) < Number.EPSILON を使う。整数を超える値は BigInt を使う

Number とは

Number は JavaScript の数値を扱うビルトインオブジェクトです。整数と小数の区別はなく、すべてIEEE 754 倍精度浮動小数点数 (64 bit)として保持されます。

数値リテラルの種類

// 10進
const a = 42;
const b = 3.14;
const c = 1.5e3;        // 1500

// 2進 / 8進 / 16進
const bin = 0b1010;     // 10
const oct = 0o755;      // 493
const hex = 0xff;       // 255

// 数値セパレータ (ES2021)
const big = 1_000_000;  // 1000000

// BigInt (整数の上限超え)
const huge = 9007199254740993n;

主要なプロパティ

プロパティ意味
Number.MAX_VALUE表現可能な最大正数≈ 1.798e+308
Number.MIN_VALUE表現可能な最小正数≈ 5e-324
Number.MAX_SAFE_INTEGER整数として安全な最大値2^53 - 1 = 9007199254740991
Number.MIN_SAFE_INTEGER整数として安全な最小値-(2^53 - 1)
Number.EPSILON1 と 1 より大きい次の値との差≈ 2.22e-16
Number.POSITIVE_INFINITY正の無限大Infinity
Number.NEGATIVE_INFINITY負の無限大-Infinity
Number.NaN非数NaN

主要な静的メソッド

Number.isInteger(42);        // true
Number.isInteger(3.14);      // false

Number.isFinite(1/0);        // false (Infinity)
Number.isFinite(NaN);        // false

Number.isNaN(NaN);           // true
Number.isNaN("NaN");         // false (グローバル isNaN との違い)

Number.isSafeInteger(2**53); // false ← 安全範囲を超える

Number.parseInt("42px");     // 42
Number.parseFloat("3.14abc");// 3.14

インスタンスメソッド

const n = 12345.6789;

n.toFixed(2);        // "12345.68"
n.toExponential(2);  // "1.23e+4"
n.toPrecision(4);    // "1.235e+4"
n.toString();        // "12345.6789"
n.toString(2);       // 2進表現
n.toString(16);      // 16進表現
n.toLocaleString('ja-JP'); // "12,345.679"

浮動小数点の落とし穴

0.1 + 0.2;                  // 0.30000000000000004
0.1 + 0.2 === 0.3;          // false ← よくあるバグ

// 安全な比較
const eq = (a, b) => Math.abs(a - b) < Number.EPSILON;
eq(0.1 + 0.2, 0.3);         // true

// 通貨計算は整数(最小単位)で扱う
const yen = 100;            // 100 円
const tax = Math.round(yen * 0.1); // 切り捨て / 切り上げを明示

整数範囲を超えるなら BigInt

Number.MAX_SAFE_INTEGER;            // 9007199254740991
Number.MAX_SAFE_INTEGER + 1 === Number.MAX_SAFE_INTEGER + 2; // true (!) 精度落ち

// BigInt は任意精度整数
9007199254740993n + 1n;             // 9007199254740994n

// 注意: Number と BigInt の演算は不可
1n + 1;                             // TypeError
1n + BigInt(1);                     // 2n

文字列 → 数値変換

方法備考
Number()Number("42") // 42非数値は NaN
parseInt()parseInt("42px") // 42基数指定推奨: parseInt(s, 10)
parseFloat()parseFloat("3.14abc") // 3.14先頭から読める分だけ
+ (単項)+"42" // 42短いが意図が分かりにくい
* 1 / - 0"42" * 1 // 42非推奨

NaN の判定

NaN === NaN;          // false ← 自分自身と等しくない唯一の値

isNaN("abc");         // true  ← グローバル: 数値変換してから判定
Number.isNaN("abc");  // false ← 厳密: NaN 値かどうかだけ判定
Number.isNaN(NaN);    // true

判定したいなら Number.isNaN() を使うのが安全です。