JavaScriptのデータ型 「数値」と「長整数」

jsコード JavaScript

本シリーズでは、プログラミング言語を問わず重要、且つ基礎的な内容である「データ型」について、連載形式で「これでもか」というぐらいに詳しく説明していきます。
説明するデータ型は、プリミティヴとして用意されている7種類を対象としています。

今回はその第二弾となり、「数値」と「長整数」がテーマです。

数値型

まず、数値には種類があります。

2024, -35, 3.14 など、数学では左からそれぞれ「正の整数」、「負の整数」、「正の小数」といった呼ばれ方がされますね。

この枠内の内容は少々難しいので、現時点で理解できる必要はありませんが、コンピュータは、10進数ではなく2進数で処理するため、2進数も数値です。

JavaScriptで2進数を表すには、数値の先頭に「0b」(ゼロ・ビー)を付加します。
例えば、0b10 であれば、10進数の 2 を表します。

なお、8進数は「0o」(ゼロ・オー)、16進数は「0x」(ゼロ・エックス)を数値の先頭に付加します。

0の次に付くアルファベットにはそれぞれ次の意味があります。

  • 「0b」の「b」はbinary(2進数)の頭文字
  • 「0o」の「o」はoctal(8進数)の頭文字
  • 「0x」の「x」はhexadecimal(16進数)の3文字目

JavaScriptでは、上記に挙げたものすべて、同じ「数値」として扱われます。

つまり、100 と 100.0 は、人間の目から見れば「整数」と「小数」なのですが、JavaScriptの世界では同じデータ型(数値型)として認識されます。

実際に試してみましょう!

例:「100」と「100.0」を、それぞれコンソールに出力してみてください。

script.js
console.log( 100 );

console.log( 100.0 );
実行結果

> 100
> 100

コンソールへの出力方法が分からない方は、「JavaScript 初めの一歩」をご確認ください。

さて、プログラミング言語を学び始めてデータ型の数値について学習する際、私は真っ先に「最大値」と「最小値」を取得する方法を調べ、実際にコードを書いて試します。

早速やってみましょう。

数値型の最大値と最小値

script.js
console.log( Number.MAX_VALUE );  // 👈Numberの「最大値」をコンソールに表示
console.log( Number.MIN_VALUE );  // 👈Numberの「最小値」をコンソールに表示
実行結果
> 1.7976931348623157e+308
> 5e-324

おや、この実行結果は何でしょうか。
数値の中に「e」という文字や、「+」「-」といった演算子が含まれています。

これは、非常に桁の大きい数を表現する際によく使用される「指数表記」というものです。

指数について

プログラミングや科学技術計算において、指数表記の「e」あるいは「E」は「10のべき乗(指数)」を簡潔に書くための方法です。

「e」(「E」)に続く数分、桁が左右(+/-)にシフトしていきます。

小さい桁で例示しますので、指数のルールを理解しておきましょう。

2e+4 👉 20000

2e-4 👉 0.0002

※ 補足として、「+」の場合は記号を省略できます。よって、「2e+4」は「2e4」と同じです。

長整数型

入門編の記事で、このデータ型を解説すべきかどうか迷ったのですが、正確さを期すため記述します。

長整数型(BigInt)は、ECMAScript 2020(バージョンとしては「ES11」)で追加されたデータ型です。
よって、それ以前のバージョンに準じたJavaScriptでは使用できません。

ECMAScriptとは、JavaScriptの国際規格です。
JavaScriptは、このECMAScriptで定められている仕様に準じて実装されているということになります。

初学者は、この記述の意味が理解できずとも問題ありません。

長整数型の意義

前項で学習した「数値型」(Number)があれば、JavaScriptで数値を扱う上で何も問題はないように感じます。
にも拘らず、わざわざ「長整数型」(BigInt)なるデータ型が追加されたのには、何か理由があるはずですね。

「数値型」(Number)と、「長整数型」(BigInt)の特徴を比較し、その謎に迫ってみましょう。

項目数値型長整数型
扱う数種浮動小数点を扱う。任意の精度の整数を扱うことができる。
精度特大の数値や極小の数値で丸め誤差が生じる可能性がある。大きな整数でも精度の損失なく計算できる。
最大値最大値は約1.7976931348623157e308。理論的には無限大までの整数を扱える(メモリの制約はある)。

それぞれの特徴をまとめると、次のようになります。

  • 数値(Number)型は浮動小数点数のため、非常に大きな数値に対して精度の問題が生じます。
  • 長整数(BigInt)型は整数演算に特化しており、非常に大きな数値を精度を保ったまま扱えますが、小数を扱うことはできません。

最後に

次に学習する記事としてオススメするのは、『JavaScriptのデータ型 「文字列」』です。

本記事についての質問、誤りの指摘、ご意見ご感想などありましたら、ぜひコメント頂ければ幸いです。

最後までお読みいただき、ありがとうございました。

『詳説 JavaScript』メニューに戻る

コメント

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