指数表現を一言でいうと
JavaScript の「指数表現」は、
とても大きい数・とても小さい数を、e を使ってコンパクトに書くための書き方 です。
数学で見る
- 1.23×104
- 5×10-3
みたいなものを、JavaScript では
1.23e4 // 1.23 × 10^4
5e-3 // 5 × 10^-3
JavaScriptのように書きます。
ここが重要です。
指数表現は 「e の右側の数だけ、10 の何乗かを表す」 と理解するとスッと入ってきます。e は「自然対数の底 e」ではなく、「×10 の何乗」という意味で使われています。
基本構文:aeb の意味をしっかり掴む
aeb は「a × 10 の b 乗」
指数表現の基本形はこうです。
aeb
JavaScriptこれは数学的には
を意味します。
const x = 1.23e4; // 1.23 × 10^4
console.log(x); // 12300
JavaScript1.23e4 は、
- 1.23 に
- 10 の 4 乗(10,000)を掛ける
→ 12300 になる、というわけです。
正の指数の例
console.log(1e3); // 1000 → 1 × 10^3
console.log(2.5e2); // 250 → 2.5 × 10^2
console.log(3e0); // 3 → 3 × 10^0(10^0 = 1)
console.log(7e1); // 70 → 7 × 10^1
JavaScript指数が大きくなるほど、「0 がたくさん付く大きな数」を簡単に表現できます。
console.log(1e6); // 1000000(100万)
console.log(1e9); // 1000000000(10億)
console.log(3.2e7); // 32000000(3200万)
JavaScript負の指数の例(小さい数)
負の指数は「10 のマイナス何乗」、つまり「小さい数」です。
console.log(1e-3); // 0.001 → 1 × 10^-3
console.log(5e-2); // 0.05 → 5 × 10^-2
console.log(3.2e-4); // 0.00032 → 3.2 × 10^-4
JavaScriptここが重要です。
指数がプラスなら「大きく」なり、マイナスなら「小さく」なる。e の右側は「小数点をどの方向に何桁動かすか」と考えると直感的です。1.23e4 は小数点を右に 4 桁、1.23e-4 は左に 4 桁動かすイメージです。
なぜ指数表現が必要なのか
とても大きな数・小さな数を扱うときに便利
日常のプログラムでも、
- ファイルサイズ(バイト)
- ミリ秒単位の時間
- 天文学的な距離
- 科学計算での非常に小さな値
など、「0 がたくさん付く」数値は普通に出てきます。
const big = 1000000000; // 10億(桁が見づらい)
const big2 = 1e9; // 10億(読みやすい)
const small = 0.000000001; // 0 が多くて分かりにくい
const small2 = 1e-9; // 1 × 10^-9(ナノ秒など)
JavaScript1e9 のほうが、「10 の 9 乗」=「10 億」 ということが、一瞬で分かります。
表示のときにも指数表現になることがある
JavaScript は、数値が非常に大きい・非常に小さいとき、
自動的に指数表現で表示することがあります。
console.log(12345678901234567890); // 1.2345678901234567e+19 のような表示になることがある
console.log(0.000000000000123); // 1.23e-13 のような表示になることがある
JavaScriptJavaScript の内部表現として指数表現が使われている と思っておくと自然です。
ここが重要です。
指数表現そのものは「特別な数」ではなく、
大きすぎる・小さすぎる数を人間に読みやすく表すための記法 です。
中身は普通の number であり、演算も通常通りに行えます。
コード内で指数表現を使う具体例
大きな定数を分かりやすく書く
const ONE_MILLION = 1e6; // 1000000
const ONE_BILLION = 1e9; // 1000000000
const fileSize = 5 * 1e6; // 5000000(約 5MB)
console.log(fileSize);
JavaScript5000000 より 5 * 1e6 のほうが、
「500 万」という意図が読み取りやすい です。
小さい単位(ミリ秒・ナノ秒など)の表現
const millisecond = 1e-3; // 0.001 秒
const microsecond = 1e-6; // 0.000001 秒
const nanosecond = 1e-9; // 0.000000001 秒
JavaScriptユニット変換をするときにも指数表現は便利です。
数学的な式の中で使う
const lightSpeed = 3e8; // 光速 ≒ 3 × 10^8 m/s
const seconds = 1;
const distance = lightSpeed * seconds;
console.log(distance); // 3e8(約 3 億メートル)
JavaScriptここが重要です。
指数表現を使うと、その数字の「桁数の意味」までコードに埋め込める ようになります。
「これ 10億 だよね? 0 いくつだっけ?」と数えなくてよくなるのが大きなメリットです。
JavaScript 特有のポイントと注意点
JS の number はすべて「倍精度浮動小数点数」
JavaScript の数値型 number は、
すべて 64 ビット浮動小数点(いわゆる double) です。
整数・小数・指数表現、すべて同じ number 型で扱われます。
console.log(typeof 100); // "number"
console.log(typeof 1.23); // "number"
console.log(typeof 1.23e4); // "number"
JavaScript指数表現だからといって、特別な型になるわけではありません。
表現できる範囲と限界(ざっくり)
number は非常に大きい値から非常に小さい値まで扱えますが、
精度には限界があります。
console.log(Number.MAX_VALUE); // 約 1.79e+308
console.log(Number.MIN_VALUE); // 約 5e-324(0 に近い最小の正の数)
JavaScriptこれらも指数表現で表示されます。
桁数が多くなるほど、
「1 ずつ増やす」ができなくなってきたり、
小数の誤差が目立ってきます。
ここが重要です。
指数表現自体は便利ですが、
「ものすごく大きい/小さい数を完全な精度で扱えるわけではない」 という点は頭の片隅に置いておいてください。
ただし、基礎学習や普通の Web アプリでは、そこまで気にしなくて大丈夫です。
指数表現の文字列との相互変換
数値 → 文字列:toExponential
数値を「指数表現の文字列」にしたい場合、toExponential が使えます。
const n = 12345.6789;
console.log(n.toExponential()); // 例: "1.23456789e+4"
console.log(n.toExponential(2)); // "1.23e+4"(有効数字 3 桁)
console.log(n.toExponential(5)); // "1.23457e+4"
JavaScript引数は「小数点以下の桁数」ではなく、有効数字の桁数 − 1 というイメージです(厳密には「小数点以下の桁数」を指定しますが、結果として有効桁数が決まります)。
文字列 → 数値:Number, parseFloat
指数表現の文字列を Number や parseFloat に渡すと、number に変換できます。
const s = "1.23e4";
console.log(Number(s)); // 12300
console.log(parseFloat(s)); // 12300
JavaScript「外部から指数表現の文字列が送られてくる」ようなケースでも、
そのまま数値に変換して計算できます。
ここが重要です。
指数表現は「書き方」としてだけでなく、「表示フォーマット」としても利用される。toExponential / Number / parseFloat を知っておくと、指数表現の文字列ともやり取りしやすくなります。
初心者として指数表現で本当に押さえてほしいこと
指数表現 aeb は、「a × 10^b」を意味する。1e6 は 1000000、1e-3 は 0.001。
とても大きい(0 が多い)数や、とても小さい(0.000… が多い)数を、
読みやすく・書きやすくするための記法。
JavaScript の number は、整数・小数・指数表現を含めてすべて「同じ型」。
指数表現で書いても中身は普通の数値として計算できる。
0〜1 の乱数 Math.random() のように、
JavaScript 自身も数値を指数表現で表示することがある。
大きすぎる・小さすぎる数は自動的に 1.23e+8 のような形になり得る。
ここが重要です。
指数表現は「特別な数学の世界の話」ではなく、
“桁の多い数をコードで扱うための、ただの便利な書き方” です。1e6 を見たら「1 × 10^6 = 100万」、5e-3 を見たら「5 × 10^-3 = 0.005」
と即座に読み替えられるようになると、数値扱いがかなり楽になります。
最後に、指数表現に慣れるための小さな練習を置いておきます。
const values = [
1e3,
2.5e4,
3e-2,
5e-3,
1.23e5,
4.56e-4,
];
for (const v of values) {
console.log(v);
}
JavaScript実行して、「自分の頭の中でイメージした値」と、
実際にコンソールに表示される値を見比べてみてください。
指数部分(e の右側の数字)が「小数点をどちらに何桁動かすか」を支配している感覚が、かなりはっきりしてくるはずです。
