JavaScriptに「int型」は存在するのか?
JavaScriptにおける数値の扱いは、他のプログラミング言語と大きく異なる特徴を持っています。
多くの言語で明確に区別されている整数型と小数型が、JavaScriptではすべてが統一された形で管理されている点です。
この違いを理解することが、JavaScript特有の数値操作を始めるための第一歩です。
【関連】
JavaScriptをもっと詳しく学ぶならpaizaラーニング
JavaScriptの数値型の基本
「42」という整数と「3.14」という小数を考えてみましょう。他のプログラミング言語では、この2つは別々の型として扱われることが多いです。
しかし、JavaScriptでは厳密な意味でのint型は存在しません。すべての数値はNumber型として扱われます。
他の言語のintやfloatのような区別がなく、整数も小数も同じデータ型で管理されています。これは初心者には理解しやすい反面、他言語から移行した開発者には混乱の元です。
出力結果
number
number
このプログラムでは、整数と小数の両方をtypeof演算子でチェックしています。
どちらも"number"と表示されることから、JavaScriptではすべての数値が同じ型として扱われていることが確認できます。
ちなみに、typeofは、変数がどんな種類のデータ(型)なのかを調べるJavaScriptの機能です。typeof 変数名という形で使用し、結果を文字列で返します。
なぜ「int」という表現が使われるのか
JavaScriptにint型がないなら、なぜintという言葉が使われるのでしょうか?
その理由は、他言語において整数としての概念的な扱いにあります。Java、C++、Pythonなどでは明確にint型が定義されているため、開発者が整数をintと呼ぶ習慣があるのです。
また、parseInt()のような関数名にもintが含まれており、整数変換の文脈で自然に使われています。
出力結果
3
4
parseInt()とMath.floor()という異なる方法で整数を取得しています。parseInt()は文字列から整数部分を抽出し、Math.floor()は小数点以下を切り捨てます。
どちらも結果として整数になりますが、JavaScriptの内部では依然としてNumber型として管理されています。
文字列から整数へ変換する方法
ユーザーの入力値やAPIから受け取ったデータを文字列から数値に変換したい場面は、よくあります。
例えば、「ユーザーが入力フォームに『25』と入力した値を数値として計算に使いたい」といったような場合です。
JavaScriptには複数の変換方法が用意されており、それぞれに特徴と適切な使用場面があります。
正しい変換方法を選択することで、予期しないバグを防ぎ、より堅牢なプログラムを作ることができるようになりましょう。
parseInt()の使い方と注意点
parseInt()は「文字列の中から整数部分だけを取り出したい」というときに使う関数です。
基本文法はparseInt(文字列, 基数)で、第二引数で進数を指定できます。小数点以下は切り捨てられ、文字列の先頭から数値として認識できる部分のみを変換します。
出力結果
25
3
255
「25ゾウ」という文字列からは数値部分の25だけを取り出し、「3.7」からは整数部分の3だけを抽出しています。16進数の「FF」は10進数の255に変換されています。
parseInt()の柔軟性を確認できるプログラムの例です。
Number()や+演算子との違い
Number()と+演算子は文字列全体を数値に変換しますが、parseInt()とは動作が異なります。
Number()は完全に数値として認識できる文字列のみを変換し、そうでなければNaNを返します。+演算子も同様の動作をしますが、より簡潔な書き方です。
出力結果
123
123
123
NaN
parseInt()とNumber()、+演算子では、文字列の扱い方が大きく違います。
- parseInt():文字列の最初から数字の部分だけを取り出す
- Number()と+演算子:文字列全体が数字でないとエラー(NaN)になる
純粋な数値文字列"123"はどの方法でも正常に変換されますが、"123abc"のような混在した文字列では、parseInt()は123を取り出し、Number()はNaNを返しています。
整数と小数の違いと判定方法
プログラミングにおいて、「この値は整数なのか、それとも小数なのか」を判別したい場面はよくあります。
例えば、「商品の個数は整数でなければならない」や「年齢は整数値で管理したい」といった業務要件がある場合です。
JavaScriptでは型レベルでの区別はありませんが、値が整数かどうかを判定する方法や、小数を整数に変換する方法があります。このような技術を理解することで、数値データを適切に処理できるようになります。
整数かどうかを判定する方法
JavaScriptでは、Number.isInteger()という関数を使って、数値が整数かどうかを調べることができます。
この関数を使うと、数値が整数の場合はtrueという答えが返ってきて、小数の場合はfalseという答えが返ってきます。
他にも、Math.floor()という関数を使って元の数値と比較する方法もありますが、Number.isInteger()を使う方がわかりやすいです。また、小数点の計算で起こりがちな細かい誤差の問題も、この関数であれば正しく処理してくれます。
出力結果
true
false
false
giraffeHeightは5.0という小数点付きの値ですが、Number.isInteger()はtrueを返しています。
これは、5.0は数学的には整数と同じ値だからです。一方、monkeyCountの3.5は明らかに小数なのでfalseが返されています。
小数から整数への変換
小数を整数に変換する際には、その手段の使い分けが必要です。
Math.floor():小数点以下を切り捨てる方法
Math.round():四捨五入する方法
parseInt():文字列からの変換と切り捨て
どの方法を選ぶかは、どんな計算結果が欲しいかによって決めましょう。
例えば、お店の在庫管理では切り捨てを使うことが多く、平均点の計算では四捨五入を使うことが多いです。目的に合った方法を選ぶことで、期待通りの結果を得ることができます。
出力結果
4
5
2
2
pandaWeightの4.7では、Math.floor()による切り捨てで4、Math.round()による四捨五入で5という異なる結果になっています。
koalaAgeの2.3では、どちらの方法でも2になっています。2.3を四捨五入しても切り捨てと同じ結果になるためです。
JavaScriptで扱える整数の範囲と最大値
JavaScriptで数字を扱う際、「どこまで大きな数を正確に計算できるのか」という限界があることを知っておく必要があります。
とても大きな数を扱う場合、計算が正確にできなくなったり、エラーが起こったりする可能性があるからです。この限界を知り、正しい対処方法を覚えておけば、数値を使った計算を安心して行うことができます。
実際にWebサイトやアプリを作るとき、ユーザーのIDや金額など大きな数値を扱う場面でこの知識が役に立つでしょう。
最大値と安全な整数範囲
JavaScriptには、Number.MAX_VALUEという「表現できる一番大きな数値」と、Number.MAX_SAFE_INTEGERという「安全に計算できる一番大きな整数」があります。
安全な範囲を超えた大きな数で計算をすると、計算結果に間違いが起こる可能性があります。
Number.isSafeInteger()という関数を使えば、その数値が安全な範囲内かどうかを確認できます。大規模なWebサイトやアプリを作るときには、この知識が必須です。
出力結果
9007199254740991
true
false
true
Number.MAX_SAFE_INTEGERは約9000兆という非常に大きな数値です。この値までは正確に計算できますが、これを超えるとNumber.isSafeInteger()がfalseを返すように、計算の精度に問題が生じる可能性があります。
この数字を覚える必要はありませんが、限界があるということは押さえておきましょう。
大きな整数を扱う場合の工夫
安全な範囲を超える非常に大きな数値を扱いたい場合は、BigIntという特別な型を使います。
BigInt型は、どれだけ大きな整数でも正確に表現することができます。作り方は2つあります。
数字の後ろにnを付ける方法と、BigInt()という関数を使う方法です。
注意点として、普通のNumber型とBigInt型を直接一緒に計算することはできません。
そのため、計算をするときは同じ型に揃える必要があります。暗号化の処理やID管理など、正確な計算が必須な場面でよく使われています。
出力結果
9007199254740992n
bigint
9007199254741092n
BigIntで作成した数値には末尾にnが付いているのが特徴です。typeofで確認すると"bigint"という専用の型であることがわかります。
sharkPopulation + dolphinCountの計算も正確に行われています。通常のNumber型では精度が失われるような大きな数値でも正確な計算が可能です。
数値の変換と表現の応用
実際にプログラムを作るときは、数値をいろいろな形で表現したり変換したりする必要があります。
例えば、16進数での表現や、数字の前に0を付けて桁数を揃えるといった処理です。このような処理は、見た目を整えたり、他のシステムとデータを連携したりする場合に重要な技術です。
より実用的なプログラムを作るためには必須な知識です。ここで押さえておきましょう。
10進数から16進数への変換
普段私たちが使っている10進数を、16進数に変換したい場合があります。
JavaScriptでは、toString()という方法を使って10進数を16進数に変換できます。括弧の中に16を指定することで16進数表記に変わります。逆に、parseInt()の2番目の値に16を指定することで、16進数から10進数への変換も可能です。
色の表現やメモリアドレスなど、コンピューター関連の処理でよく使われる技術です。
出力結果
ff
FF
255
foxIdの255という10進数が、toString(16)によって"ff"という16進数に変換されています。toUpperCase()を使うことで大文字の"FF"にすることもできます。
逆に、parseInt("FF", 16)では16進数の"FF"が10進数の255に正しく変換されています。このように、10進数と16進数を自由に行き来できるのがわかります。
桁数を扱うテクニック
数値が何桁あるかを調べたり、足りない桁数を0で埋めて桁数を揃えたりしたい場合があります。
数値の桁数を知りたいときは、toString()で文字列に変換してから長さを取得することで桁数がわかります。padStart()という方法を使えば、指定した桁数になるまで先頭に文字を追加できます。
レポートを出力したり、画面の表示形式を統一したりする場合に有用な技術です。
出力結果
2
007
0042
horse_numberの42は2桁の数字なので、toString().lengthで桁数を調べると2が返されています。
zebraIdの7は1桁ですが、padStart(3, "0")で3桁になるまで前に0を付けているという形です。その結果、"007"になっているのが確認できるかと思います。
同様に、horseNumberも4桁に揃えて"0042"という形になっていますね。
よくある質問(Q&A)
Q: NaNとundefinedの違いは何ですか?
A: NaNは「Not a Number」の略で、数値の計算がうまくいかなかった場合の結果です。undefinedは変数に何も値が入っていない状態を表します。
parseInt("文字")はNaNを返しますが、宣言のみの変数はundefinedになります。型も異なり、NaNはnumber型、undefinedはundefined型です。
出力結果
NaN
undefined
Q: 小数点の計算で誤差が出るのはなぜ?
A: JavaScriptは小数を2進数で表現するため、0.1 + 0.2のような計算で小さな誤差が生じます。
これはコンピューターの仕組み上、どうしても避けられない問題です。お金の計算など正確性が重要な場合は、整数に変換してから計算し、最後に小数点を戻すという方法が推奨されます。
出力結果
0.30000000000000004
0.3
Q: parseIntで基数を指定しないとどうなりますか?
A: 基数を省略すると、文字列の形式によってJavaScriptが自動で判定しますが、予期しない結果になる場合があります。
"0"で始まる文字列は8進数と解釈される可能性があり、"0x"で始まると16進数になります。このようなバグを防ぐため、必ず第二引数で基数10を明示することが大切です。
出力結果
8
8
255
Q: 文字列の数値チェックはどうすればよいですか?
A: isNaN()やNumber.isNaN()を使って数値かどうかをチェックできますが、動作が異なります。
isNaN()は型変換を行ってから判定し、Number.isNaN()は厳密にNaNかどうかを判定します。
また、正規表現を使って数値文字列かを事前にチェックする方法も効果的です。
出力結果
false
false
true
Q: 負の数の整数変換で注意することは?
A: 負の数でもparseInt()やMath.floor()は正常に動作しますが、結果が異なる場合があります。
例えば、Math.floor()は数直線上でより小さい整数に向かうため、負数では絶対値が大きくなります。Math.trunc()を使えば、正負に関係なく小数部分のみを切り捨てることができます。
出力結果
-4
-3
-3
まとめ
この記事では、JavaScriptにおける整数の扱いについて、基礎から実践的な応用まで幅広く解説してきました。
JavaScriptは他のプログラミング言語とは異なり、すべての数値をNumber型として統一して管理するという特徴があります。
これを理解することが、JavaScriptでの数値操作をマスターする第一歩です。
重要なポイントを振り返っておきましょう。
重要なポイント
- JavaScriptでは、整数も小数もすべてNumber型という同じ種類で扱われる
- 文字列を数値に変換する方法には、parseInt()、Number()、+演算子という3つの方法がある
- Number.isInteger()を使って、数値が整数かどうかを調べることができる
- Math.floor()などの関数で、小数を整数に変換できる
- 非常に大きな数値を扱う場合のために、BigInt型という特別な型がある
- toString()で進数を変換したり、padStart()で桁数を揃えたりできる
JavaScriptでの数値操作は、Web開発において避けて通れない重要なスキルです。
ユーザー入力の処理、API通信、計算処理など、あらゆる場面で今回紹介した知識が必要だからです。
今回お伝えした内容を押さえて、さまざまなパターンの数値操作を実際に試し、JavaScriptのプログラミングスキルを身に付けていきましょう。