JavaScript | 数値リテラルの記述方法

javascrpit JavaScript
スポンサーリンク

概要

  • JavaScript の通常の数値はすべて Number 型で、内部では 64ビット浮動小数点(IEEE 754) で表現されます。
    → 整数も小数も同じ型で扱われます。
  • 大きな整数を正確に扱いたいときは BigInt(末尾に n を使います(例:123n)。

数値リテラル(書き方)

よく使う書き方と例。

10進(普通)

const a = 182;    // 182
JavaScript

16進(先頭に 0x / 0X)

const b = 0xB6;   // = 182
JavaScript

8進(ES6以降: 0o / 0O)

const c = 0o266;  // = 182
JavaScript

2進(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
// ただし、先頭・末尾・小数点直前直後や連続は禁止 -> 無効な書き方に注意
JavaScript

BigInt(大きな整数)

  • 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 / 0Infinity
  • NaN(Not a Number):ゼロ除算や不正な変換で発生(0/0Number("abc") など)。
    • NaN === NaNfalse(特殊!) → 判定には 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") → 123
  • parseInt("123px", 10) → 123(整数部分を解析。常に基数を指定するのが安全)
  • parseFloat("3.14abc") → 3.14
  • 速く書くなら + 演算子:+ "123" → 123

注意点:

  • Number("") → 0、parseInt("") → NaN(違いに注意)

よく使う便利関数(覚えておくと安全)

  • Number.isNaN(value)Number.isFinite(value)
  • Number.MAX_SAFE_INTEGERNumber.MIN_SAFE_INTEGER
  • Math.round, Math.floor, Math.ceil, Math.abs などの Math 関数

まとめ(初心者向けの実用アドバイス)

  1. 普通は Number を使う。整数も小数も同じ型。
  2. 大きな整数は BigInt(末尾 n)で。Number と混ぜない。
  3. 小数の比較はそのまま比較しない(丸め誤差に注意)。表示は toFixed、比較は許容誤差を使う。
  4. 進数表記(0x / 0o / 0b)は便利。古い先頭0形式は避ける。
  5. 文字列→数値の変換は Number()parseInt(..., 10) を使う(基数を指定)。
  6. お金など正確さが必要な計算は「整数(セント)」で扱うか、専用ライブラリを使う。
タイトルとURLをコピーしました