JavaScript の Number を一言でいうと
JavaScript の Number は
「整数も小数もぜんぶまとめて扱う “数字用の型”」です。
他の言語だと「int」「float」「double」など数字の型が分かれていることが多いですが、
JavaScript では「とりあえず全部 Number」です。
ここが重要です。
JavaScript の数字は
整数も小数も Number 型ひとつで表現する
というルールになっています。
この前提を押さえてから細かい話に入ると、理解がかなりラクになります。
Number の基本:整数も小数も同じ型
Number 型の変数の宣言は、普通に数を書くだけです。
let age = 20; // 整数
let price = 1200.5; // 小数
JavaScripttypeof で型を確認すると、どちらも number になります。
console.log(typeof age); // "number"
console.log(typeof price); // "number"
JavaScript整数だから特別な型、ということはありません。-5 や 0、3.14、-10.8 のような負の数や小数も、全部 number です。
ここが重要です。
「整数か小数か」を意識するのではなく、「これは数か、それ以外か」だけに集中すればいい、
というのが JavaScript のシンプルなところです。
Number でできる基本的な計算
足し算、引き算、掛け算、割り算、剰余(余り)など、
基本的な算数はほぼそのままの記号で書けます。
let a = 10;
let b = 3;
console.log(a + b); // 13(足し算)
console.log(a - b); // 7 (引き算)
console.log(a * b); // 30(掛け算)
console.log(a / b); // 3.3333333333333335(割り算)
console.log(a % b); // 1 (余り)
JavaScript割り算は小数になります。
JavaScript には「整数同士の割り算だから小数は切り捨て」みたいな自動ルールはありません。
必要なら自分で丸めます。
let result = 10 / 3;
console.log(Math.floor(result)); // 3(小数点以下切り捨て)
console.log(Math.round(result)); // 3(四捨五入)
console.log(Math.ceil(result)); // 4(切り上げ)
JavaScriptここが重要です。
割り算の結果は基本的に小数になる
整数にしたいときは Math.floor や Math.round などで自分で調整する
という感覚を持っておくと混乱が減ります。
Number 特有の値:NaN と Infinity
NaN(Not a Number)とは
NaN は「数値型(number)だけど、まともな数ではない」という特別な値です。
例えば、明らかにおかしな計算をすると出てきます。
let result = 0 / 0;
console.log(result); // NaN
console.log(typeof result); // "number"
JavaScripttypeof は number を返していますが、
中身は「数ではない(Not a Number)」という状態です。
もう一つ例です。
let x = "abc" * 10;
console.log(x); // NaN
JavaScript文字列 "abc" を数として計算しようとして失敗しているので、NaN になります。
ここが重要です。
NaN は
「計算の結果が数字として成り立たなかった」
ことを表すための、number 型の特殊な値です。NaN になってしまったら、その前のどこかで「変な計算をしている」と考えるべきサインです。
NaN は自分自身と等しくない
ややこしいですが、NaN は自分自身とも等しくありません。
console.log(NaN === NaN); // false
JavaScript「えっ?」と思うかもしれませんが、
「どんな NaN も、正確に同じ NaN とは限らない」という考え方からこうなっています。
NaN かどうかをチェックしたいときは、Number.isNaN を使います。
let value = 0 / 0;
console.log(Number.isNaN(value)); // true
JavaScriptInfinity(無限大)と -Infinity
0 で割ろうとすると、言語によってはエラーになりますが、
JavaScript では Infinity や -Infinity になります。
console.log(10 / 0); // Infinity
console.log(-10 / 0); // -Infinity
console.log(typeof (10 / 0)); // "number"
JavaScriptこれも number 型です。
「極端に大きい/小さい結果」になる計算をすると Infinity や -Infinity が出ることがあります。
数値計算をしていて結果が Infinity になったら、桁数が大きすぎるなど問題があるかも、と疑ってください。
小数(浮動小数点数)の罠:0.1 + 0.2 が 0.3 にならない理由
JavaScript(というより多くのプログラミング言語)では、
小数は「2進数での近似値」として内部で表現されています。
このせいで、よく有名な現象が起きます。
console.log(0.1 + 0.2); // 0.30000000000000004
console.log(0.1 + 0.2 === 0.3); // false
JavaScript人間的には「0.1 + 0.2 = 0.3」です。
ですが、コンピュータ内部では「0.1 も 0.2 もほんの少しズレた値」でしか表現できず、
足した結果が「0.3 ぴったり」にはなってくれません。
ここが重要です。
JavaScript の Number は「浮動小数点数」という表現を使っているので
小数の計算結果は「ほんのわずかにズレる」ことがある
という点を必ず頭の片隅に置いておいてください。
たとえばお金の計算など、
「絶対に桁ズレしてほしくない」場面では、
整数(1円単位)で持っておいて必要なときだけ割る
小数を使う範囲をできるだけ短くする
といった工夫をすることが多いです。
文字列との相互変換:数字に変えたい/文字列にしたい
文字列 → 数字(Number に変換)
ユーザー入力や HTML の input から取ってきた値は、
基本的に「文字列」として扱われます。
let input = "123";
console.log(typeof input); // "string"
JavaScriptこれを数字として扱いたいときは、Number、parseInt、parseFloat などで変換します。
let input = "123";
let n1 = Number(input); // 123(number)
let n2 = parseInt(input, 10); // 123(10進数として解釈)
console.log(n1 + 1); // 124
JavaScript数字っぽい文字列でないときは NaN になります。
console.log(Number("abc")); // NaN
JavaScript数字 → 文字列
逆に、数字を文字列として扱いたい場合は String や toString を使います。
let age = 20;
let s1 = String(age); // "20"
let s2 = age.toString(); // "20"
console.log(typeof s1); // "string"
JavaScript文字列にしておけば、文章との連結が自然にできます。
let price = 1200;
console.log("値段は " + price + " 円です");
JavaScript数値判定に使えるメソッドたち(軽く紹介)
初心者のうちはざっくり「こういうのがある」と知っておく程度で十分です。
Number.isNaN(value)
値が NaN かどうかを判定する。
Number.isFinite(value)
有限の数(Infinity や NaN ではない普通の数)かどうか。
Number.isInteger(value)
整数かどうかを判定する。
例として:
console.log(Number.isNaN(0 / 0)); // true
console.log(Number.isFinite(10 / 0)); // false(Infinity)
console.log(Number.isInteger(10)); // true
console.log(Number.isInteger(3.14)); // false
JavaScriptここが重要です。
エラーが出ないまま NaN や Infinity が紛れ込むのが一番怖いので、
「怪しいな」と思った計算結果にはNumber.isNaN や Number.isFinite を当ててみるのが良い習慣です。
BigInt との違いをちらっとだけ
最近の JavaScript には、BigInt という「超大きな整数」を扱う型もあります。
let big = 9007199254740991n; // 最後の n が BigInt の印
JavaScriptですが、初心者のうちは
「普通の数字は全部 Number
超巨大な整数が必要になったら BigInt もある」
くらいの理解で十分です。
Number と BigInt はそのまま足し算したりできません。
混ぜて使うのは少し注意が必要なので、必要になったときに改めて学べば OK です。
初心者向け Number の押さえどころ
最後に、Number 型について本当に大事なポイントだけ整理します。
JavaScript の数字は、整数も小数も全部 Number 型ひとつで扱う。
+ - * / % で基本的な計算ができる。割り算は小数になるので、整数にしたいときは Math.floor などで丸める。
NaN は「数値計算に失敗したときの特別な number」。Number.isNaN でチェックできる。
Infinity / -Infinity は「極端に大きな値」や「0で割ったとき」などに現れる特殊な number。
小数の計算は、0.1 + 0.2 が 0.3 にならないような「誤差」が出ることがあるので、お金などの扱いには注意が必要。
文字列との変換には Number() / parseInt() / parseFloat() や String() / toString() を使う。
ここが重要です。
「これは数か?」「これは数として扱って大丈夫か?」
という視点で、Number と NaN、Infinity の存在を意識できるようになると、
「なんか計算結果がおかしい」「なんか NaN が出る」といったモヤモヤの原因が、自分で追えるようになっていきます。
もしよければ、次のような小さな練習をしてみてください。
let a = "10"; let b = "20"; という 2 つの文字列から
- 文字列のまま
a + bをした結果 - 数字に変換してから
a + bをした結果
を比べてみる。
そこから
「JavaScript は文字列と数値をどう扱い分けているのか」
を体感してみると、Number 型のイメージがかなりクリアになってくるはずです。

