JavaScript | 基礎構文:数値・演算 – 数値変換

JavaScript JavaScript
スポンサーリンク

数値変換とは何か

数値変換は、文字列や真偽値などを「数値として計算できる形」にすることです。フォーム入力やCSV処理など、プログラムでは文字列で受け取った値を数値に変えて計算する場面が多くあります。JavaScriptには複数の変換手段があり、用途に応じて使い分けるのが安全です。


代表的な変換方法

Number関数での厳密変換

Number(…) は文字列全体が数値として妥当かを評価し、変換できなければ NaN を返します。空白は無視されますが、単位や文字が混ざっていると失敗します。

Number("42");        // 42
Number("  3.5 ");    // 3.5
Number("12px");      // NaN
Number("");          // 0
Number("   ");       // 0
JavaScript

parseInt / parseFloat で先頭から読み取る

parseInt は整数、parseFloat は小数や指数表記を「文字列の先頭から読めるところまで」取り出します。十進数の整数なら parseInt に 10 を指定して誤解釈を避けます。

parseInt("123px", 10);   // 123
parseFloat("7.5kg");     // 7.5
parseFloat("1.2e3");     // 1200
parseInt("abc", 10);     // NaN
JavaScript

単項プラス(+)で素早く変換

先頭に + を付けると Number と同様に厳密変換を行います。短く書けますが、可読性に注意が必要です。

+"10";        // 10
+"3.14";      // 3.14
+"12px";      // NaN
JavaScript

文字列からの変換の挙動

空文字や空白のみの文字列

空文字 “” や空白だけの文字列は Number で 0 になります。意図しないゼロ扱いを避けたいなら、空チェックを別途行うのが安全です。

Number("");     // 0
Number("   ");  // 0
JavaScript

小数・指数表記の扱い

Number と parseFloat は指数表記(e 記法)を理解します。parseInt は小数点より前までしか読みません。

Number("1.5e2");   // 150
parseFloat("1.5e-2"); // 0.015
parseInt("10.9", 10); // 10
JavaScript

真偽値・null・undefinedの変換

真偽値の変換

true は 1、false は 0 に変換されます。数値化して足し引きに使う場面もあります。

Number(true);   // 1
Number(false);  // 0
JavaScript

null と undefined の違い

null は 0、undefined は NaN になります。未入力を 0 として扱うかエラーにするか、要件に合わせて分岐しましょう。

Number(null);      // 0
Number(undefined); // NaN
JavaScript

NaNの扱いと判定

NaNの検出はNumber.isNaNで行う

NaN は「数値ではない」を示す特別な値で、計算に混ざると結果が NaN に伝播します。判定には Number.isNaN を使うのが安全です。

const n = Number("12px");   // NaN
Number.isNaN(n);            // true
JavaScript

isNaNとの違いに注意

グローバル isNaN は型変換後に判定するため、意図せず true になることがあります。基本は Number.isNaN を使います。

isNaN("foo");         // true(数値化できないから)
Number.isNaN("foo");  // false(値そのものは NaN ではない)
JavaScript

実用パターン

入力を安全に数値化する関数

先に Number で変換し、NaN なら null を返すなど扱いやすい形に整えます。

function toNumberSafe(s) {
  const n = Number(s);
  return Number.isNaN(n) ? null : n;
}

toNumberSafe("42");   // 42
toNumberSafe("abc");  // null
JavaScript

単位付き文字列から数値を取り出す

単位が混ざるなら parseFloat / parseInt を使い、必要に応じて前処理で数字部分を抽出します。

parseFloat("72.5kg");        // 72.5
parseInt("size=42px".replace(/^\D+/, ""), 10); // 42
JavaScript

配列の数値化と集計

数値化してから NaN を除外し、合計や平均を計算します。

const raw = ["10", "x", "20", "", "3.5"];
const nums = raw.map(Number).filter(n => !Number.isNaN(n));
const sum = nums.reduce((a, b) => a + b, 0);   // 33.5
const avg = nums.length ? sum / nums.length : 0; // 11.166...
JavaScript

よくある落とし穴と回避策

parseIntの基数は常に明示する

十進数のつもりなら第二引数に 10 を付けて、環境や表記の違いによる誤解釈を防ぎます。

parseInt("08", 10); // 8
JavaScript

空文字が0になる仕様に注意する

「未入力はエラー」にしたいなら、空チェックを先に行います。未入力を 0 として扱うなら明示的にデフォルト値を与えます。

function parsePrice(s) {
  if (s.trim() === "") return "入力が空です";
  const n = Number(s);
  return Number.isNaN(n) ? "数値にしてください" : n;
}
JavaScript

小数が必要ならparseFloatかNumberを使う

parseInt は小数を切り捨てるため、誤って精度を失わないように選択します。

parseInt("9.99", 10); // 9
parseFloat("9.99");   // 9.99
JavaScript

まとめ

数値変換は「厳密に全体を評価する Number」「先頭から読めるところまで取り出す parseInt / parseFloat」「短い書き方の単項プラス」の三本柱を用途で使い分けます。NaN は Number.isNaN で判定し、空文字や単位付きなどの入力特性に応じて前処理を挟むと安全です。基数指定、空チェック、NaN除外の三点を押さえるだけで、初心者でも数値処理のトラブルを大幅に減らせます。

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