parseInt()
BaselineWidely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
parseInt()
関数は、文字列の引数を解釈し、指定された基数 (数学的記数法の底)の整数値を返します。
試してみましょう
console.log(parseInt("123"));// 123 (default base-10)console.log(parseInt("123", 10));// 123 (explicitly specify base-10)console.log(parseInt(" 123 "));// 123 (whitespace is ignored)console.log(parseInt("077"));// 77 (leading zeros are ignored)console.log(parseInt("1.9"));// 1 (decimal part is truncated)console.log(parseInt("ff", 16));// 255 (lower-case hexadecimal)console.log(parseInt("0xFF", 16));// 255 (upper-case hexadecimal with "0x" prefix)console.log(parseInt("xyz"));// NaN (input can't be converted to an integer)
構文
parseInt(string)parseInt(string, radix)
引数
返値
指定されたstring
を解釈した整数値です。また、次の場合はNaN
が返されます。
radix
を 32 ビット整数にした値が2
よりも小さいか36
よりも大きい、または- ホワイトスペース以外の最初の文字が数値に変換できない。
メモ:JavaScript は言語レベルで「浮動小数点数」と「整数」の区別がありません。parseInt()
とparseFloat()
は解釈の動作が異なるだけで、必ずしも返値が異なるわけではありません。例えば、parseInt("42")
とparseFloat("42")
は同じ値である数値型の 42 を返します。
解説
parseInt
関数は第 1 引数を文字列に変換し、解釈したうえで、整数またはNaN
を返します。
NaN
でない場合は、返値は第 1 引数を指定されたradix
で数値として解釈した整数値になります。(例えば、radix
が10
であれば 10 進数からの変換で、8
であれば 8 進数からの変換で、16
であれば 16 進数からの変換、などです。)
radix
引数は数値に変換されます。提供されなかった場合、または値が 0、NaN
、Infinity
のいずれかであった場合(undefined
はNaN
に強制されます)、 JavaScript は以下のように想定します。
- 入力された
string
の先頭のホワイトスペースと、存在すれば+
/-
符号が除去され、0x
または0X
(ゼロ、従うこと以下で小文字または大文字の X)で始まっている場合、radix
は16
とみなされ、文字列の残りの部分は 16 進数として解釈されます。 - 入力された
string
が他の何らかの値で始まる場合、基数は10
(10 進数)になります。
メモ:他にも0b
のような接頭辞は数値リテラルでは有効ですが、parseInt()
では通常の数字として扱われます。parseInt()
は0
で始まる文字列を 8 進数の値として扱うことはありません。parseInt()
が認識できる接頭辞は、16 進数の値に対する0x
または0X
だけです。radix
がなければ、それ以外はすべて 10 進数として解釈されます。Number()
またはBigInt()
を使用して、これらの接頭辞を解釈することができます。
基数が16
の場合、parseInt()
では、オプションで符号文字 (+
/-
) の後に0x
または0X
を接頭辞として文字列を指定することができます。
(必要に応じて数値に変換された)基数の値が [2, 36] (両端を含む)の範囲になかった場合は、parseInt
はNaN
を返します。
10
以上の基数については、9
より大きい数字はアルファベットで示されます。たとえば、 16 進数(基数16
)ではA
からF
が用いられます。文字の大文字小文字は区別しません。
parseInt
は 2 つの符号を正確に理解します。+
は正の符号で、-
は負の符号です。これは解釈の最初の段階で、ホワイトスペースを除去した後に行われます。符号が見つからなかった場合は、アルゴリズムは次の段階に移行します。そうでなければ、符号を取り除いて残りの文字列の数値の解釈を実行します。
もしparseInt
がradix
で指定された基数に含まれる数字以外の文字に遭遇した場合、その文字とそれに続くすべての文字を無視し、この点まで解釈できた整数値を返します。例えば、1e3
は技術的には整数をエンコードしたものですが、(そしてparseFloat()
では正しく1000
と解釈されますが)、parseInt("1e3", 10)
は1
を返します。e
は基数 10 の有効な数字ではないからです。.
も数字ではないので、返値は常に整数になります。
最初の文字が使用している基数で数字に変換できなかった場合は、parseInt
はNaN
を返します。先頭のホワイトスペースは許容されます。
数値演算の目的では、NaN
は基数がいくつであっても数値にはなりません。Number.isNaN
関数を使うと、parseInt
の結果がNaN
であるかどうか確かめられます。数値演算でNaN
が与えられると、演算結果もNaN
になります。
巨大な数値ではe
の文字を文字列表現の中で使用しますので(例えば6.022E23
は 6.022 × 10^23 を表します)、parseInt
を使用して数値を切り捨てると、とても大きな数字やとても小さな数字を使用する際に予期しない結果を生み出すことがあります。parseInt
をMath.trunc()
の代用として使うべきではありません。
数値を基数を指定してその文字列表現に変換するには、thatNumber.toString(radix)
を用います。
parseInt()
は数値を返すので、文字列が表す整数が安全な範囲の外の場合、精度が落ちる可能性があります。BigInt()
関数はBigInt
を返すことで、任意の長さの整数を正確に解釈することに対応しています。
例
parseInt() の使用
以下の例はいずれも15
を返します。
parseInt("0xF", 16);parseInt("F", 16);parseInt("17", 8);parseInt("015", 10);parseInt("15,123", 10);parseInt("FXX123", 16);parseInt("1111", 2);parseInt("15 * 3", 10);parseInt("15e2", 10);parseInt("15px", 10);parseInt("12", 13);
以下の例はいずれもNaN
を返します。
parseInt("Hello", 8); // まったく数字ではないparseInt("546", 2); // 2 進数では 0 または 1 以外の数字は無効
以下の例はいずれも-15
を返します。
parseInt("-F", 16);parseInt("-0F", 16);parseInt("-0XF", 16);parseInt("-17", 8);parseInt("-15", 10);parseInt("-1111", 2);parseInt("-15e1", 10);parseInt("-12", 13);
以下の例は224
を返します。
parseInt("0e0", 16);
parseInt()
はBigInt
の値を扱いません。n
の文字で解釈を停止し、それまでの文字列を通常の整数として扱うため、精度が落ちる可能性があります。
parseInt("900719925474099267n");// 900719925474099300
代わりに、文字列を末尾のn
なしでBigInt()
関数に渡してください。
BigInt("900719925474099267");// 900719925474099267n
parseInt
は数値の区切り文字を扱うことができません。
parseInt("123_456"); // 123
文字列でないものに対する parseInt() を使用
parseInt()
は、文字列でないものを大きな基数で扱う場合に興味深い結果をもたらすことがあります。例えば、36
の場合です(これはすべての英数字を有効な数字にします)。
parseInt(null, 36); // 1112745: "null" の文字列は 36 進数で 1112745parseInt(undefined, 36); // 86464843759093: "undefined" の文字列は 36 進数で 86464843759093
一般に、parseInt()
を文字列以外で使用すること、特にMath.trunc()
の代用として使用するのは良くない考えです。小さな数では使えるかもしれません。
parseInt(15.99, 10); // 15parseInt(-15.1, 10); // -15
しかし、これはたまたま、この数値の文字列表現が基本的な小数表記 ("15.99"
,"-15.1"
) を使用しており、parseInt()
が小数点で止まっているためにうまく動作しているだけです。 1e+21 以上または 1e-7 以下の数値は、文字列表現に指数表記 ("1.5e+22"
,"1.51e-8"
) を使用するため、parseInt()
は常に最初の桁の後に来るe
の文字または小数点で停止します。つまり、大きな数でも小さな数でも、parseInt()
は 1 桁の整数を返すということです。
parseInt(4.7 * 1e22, 10); // 巨大な数値が 4 になるparseInt(0.00000000000434, 10); // 極小の数値が 4 になるparseInt(0.0000001, 10); // 1parseInt(0.000000123, 10); // 1parseInt(1e-7, 10); // 1parseInt(1000000000000000000000, 10); // 1parseInt(123000000000000000000000, 10); // 1parseInt(1e21, 10); // 1
仕様書
Specification |
---|
ECMAScript® 2026 Language Specification # sec-parseint-string-radix |