概要
- JavaScript の通常の数値はすべて Number 型で、内部では 64ビット浮動小数点(IEEE 754) で表現されます。
→ 整数も小数も同じ型で扱われます。 - 大きな整数を正確に扱いたいときは BigInt(末尾に
n) を使います(例:123n)。
数値リテラル(書き方)
よく使う書き方と例。
10進(普通)
const a = 182; // 182
JavaScript16進(先頭に 0x / 0X)
const b = 0xB6; // = 182
JavaScript8進(ES6以降: 0o / 0O)
const c = 0o266; // = 182
JavaScript2進(ES6以降: 0b / 0B)
const d = 0b10110110; // = 182
JavaScriptどれも内部では同じ数値になります。古い「先頭に0で8進」といった表記(例: 0266)は避けたほうが安全です。
小数と指数表記
小数
const x = 4.852;
JavaScript指数表記(e記法)
const y = 3.2e5; // 3.2 × 10^5 = 320000
const z = 4.7e-6; // 4.7 × 10^-6 = 0.0000047
JavaScript可読性のための区切り(Numeric Separator)
桁を読みやすくするためにアンダースコア _ が使えます(ES2021)。
const money = 1_000_000; // OK
const mask = 0xFF_FF; // OK
// ただし、先頭・末尾・小数点直前直後や連続は禁止 -> 無効な書き方に注意
JavaScriptBigInt(大きな整数)
nを付けると BigInt。
const big = 9007199254740993n;
JavaScript- BigInt は小数を扱えない(
1.5nは不可)/Number と混ぜて計算できない(1n + 2はエラー)ので、必要なら明示的に変換します。
よくある落とし穴:浮動小数点の丸め誤差
二進数で表現できない小数があり、計算で微妙にズレます。
0.1 + 0.2 // => 0.30000000000000004
JavaScript対処法(初心者向け実務的):
- 表示用は
toFixed(※文字列になる):(0.1 + 0.2).toFixed(2) // "0.30" - 比較は許容誤差を使う:
Math.abs(a - b) < 1e-10のように閾値を決める。 - お金の計算は「整数(セントなど)」で扱う:
(100 * 0.1 + 100 * 0.2) / 100のようにスケールするか、専用ライブラリ(decimal.js など)を使う。
特殊な値(NaN, Infinity)
Infinity/-Infinity:たとえば1 / 0→Infinity。NaN(Not a Number):ゼロ除算や不正な変換で発生(0/0、Number("abc")など)。NaN === NaNは false(特殊!) → 判定にはNumber.isNaN(value)を使う。isNaN()(グローバル関数)は引数を数値に変換してから判定するので挙動が異なる場合がある。初心者はNumber.isNaN()を推奨。
例:
Number.isNaN(NaN); // true
isNaN("abc"); // true ("abc"を数に変換するとNaNになるので)
Number.isNaN("abc"); // false (変換せずに値そのものをチェック)
JavaScript安全に扱う:整数の限界(MAX_SAFE_INTEGER)
Number.MAX_SAFE_INTEGER= 2^53 – 1 = 9007199254740991
この値を超えると整数の精度が保証されません。
Number.MAX_SAFE_INTEGER // 9007199254740991
9007199254740992 === 9007199254740993 // => true (精度の喪失例)
JavaScript大きな正確な整数が必要なら BigInt を検討しましょう。
文字列 ↔ 数値 の変換
Number("123")→ 123parseInt("123px", 10)→ 123(整数部分を解析。常に基数を指定するのが安全)parseFloat("3.14abc")→ 3.14- 速く書くなら
+演算子:+ "123"→ 123
注意点:
Number("")→ 0、parseInt("")→ NaN(違いに注意)
よく使う便利関数(覚えておくと安全)
Number.isNaN(value)、Number.isFinite(value)Number.MAX_SAFE_INTEGER、Number.MIN_SAFE_INTEGERMath.round,Math.floor,Math.ceil,Math.absなどのMath関数
まとめ(初心者向けの実用アドバイス)
- 普通は
Numberを使う。整数も小数も同じ型。 - 大きな整数は
BigInt(末尾n)で。Number と混ぜない。 - 小数の比較はそのまま比較しない(丸め誤差に注意)。表示は
toFixed、比較は許容誤差を使う。 - 進数表記(0x / 0o / 0b)は便利。古い先頭0形式は避ける。
- 文字列→数値の変換は
Number()やparseInt(..., 10)を使う(基数を指定)。 - お金など正確さが必要な計算は「整数(セント)」で扱うか、専用ライブラリを使う。


