--- title: parseInt() slug: Web/JavaScript/Reference/Global_Objects/parseInt tags: - JavaScript - Method - Reference - parseInt translation_of: Web/JavaScript/Reference/Global_Objects/parseInt ---
parseInt()
は、文字列の引数を解析し、指定された基数 (数学的記数法の底) の整数値を返します。
このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力していただける場合は、https://github.com/mdn/interactive-examples をクローンしてプルリクエストを送信してください。
parseInt(string [, radix])
string
ToString
を用いて文字列に変換されます。この引数では先頭の{{glossary("whitespace", "ホワイトスペース")}}は無視されます。radix
{{optional_inline}}2
から 36
までの整数で、string
の基数 (数学的記数法の底) を表します。これは既定値が 10
ではないので注意してください。radix
が提供されなかった場合に何が起こるかをもっと詳細に説明しています。指定された string
を解析した整数値です。
また、下記の場合は {{jsxref("NaN")}} が返されます。
radix
が 2
よりも小さいか 36
よりも大きい、または rparseInt
関数は第1引数を文字列に変換し、解析したうえで、整数または NaN
を返します。
返値は NaN
でない場合は、第1引数を指定された radix
で数値として解釈した整数値になります。(例えば、radix
が 10
であれば 10進数からの変換で、8
であれば 8進数からの変換で、16
であれば 16進数からの変換、などです。)
10
以上の基数については、9
より大きい数字はアルファベットで示されます。たとえば、16進数(基数 16
) では A
から F
が用いられます。
parseInt
関数は指定された radix
における数字ではない文字に出会うと、それ以降の文字を無視し、その時点で解析された整数値を返します。parseInt
は数値を整数に切り捨てます。前後に空白があっても構いません。
数値によっては e
の文字を文字列表現の中で使用しますので (例えば 6.022e23
は 6.022 × 1023 を表します)、parseInt
を使用して数値を切り捨てると、とても大きな数字やとても小さな数字を使用する際に予期しない結果を生み出すことがあります。parseInt
を {{jsxref("Math.floor()")}} の代用として使うべきではありません。
parseInt
は 2 つの符号を正確に理解します。+
は正の符号で、-
は負の符号です (ECMAScript 1 より)。これは解析の最初の段階で、ホワイトスペースを除去した後に行われます。符号が見つからなかった場合は、アルゴリズムは次の段階に移行します。そうでなければ、符号を取り除いて残りの文字列の数値の解析を実行します。
radix
が undefined
, 0
, または指定されなかった場合、JavaScript 以下のように仮定します。
string
が "0x
" または "0X
" (ゼロに続いて小文字または大文字の X) で始まった場合は、radix
は 16
と仮定され、残りの文字列が 16進数として解釈されます。string
が "0
" (ゼロ) で始まった場合は、radix
は 8
(8進数) または 10
(10進数) と仮定されます。厳密にどちらの基数が選択されるかは実装に依存します。ECMAScript 5 では 10
(10進数) を使用するべきだと明示していますが、まだすべてのブラウザーが対応している訳ではありません。したがって、parseInt
関数を使うときは radix
を常に指定してください。string
がその他の値で始まるときは、基数は 10
(10進数) となります。初めの文字が数値に変換できないときは、parseInt
は NaN
を返します。
数値演算の目的では、NaN
は基数がいくつであっても数値にはなりません。{{jsxref("isNaN")}} 関数を使うと、parseInt
の結果が NaN
であるかどうか確かめられます。数値演算で NaN
が与えられると、演算結果も NaN
になります。
数値を特定の基数で文字列リテラルに変換したいときは、thatNumber.toString(radix)
を使用してください。
{{jsxref("BigInt")}} の警告: parseInt
は {{jsxref("BigInt")}} を {{jsxref("Number")}} へ変換するので、その処理中に精度が落ちます。これは後に付く数値ではない値が、"n
" を含めて、切り落とされるからです。
ECMAScript 3 で非推奨となり、ECMAScript 5 で廃止されたものの、多くの実装が 0
で始まる数字の文字列を 8進数として解釈します。以下の式は 8進数とされることもあれば、10進数で扱われることもあります。つねに radix
を指定すれば、信頼できない動作を防ぐことができます。
parseInt('0e0') // 0 parseInt('08') // '8' は 8進数では用いられないため、0。
ECMAScript 5 仕様書において parseInt
関数は、0
の文字で始まる文字列を 8進数として扱うことをもはや実装に認めなくなりました。
ECMAScript 5 では次のように宣言しています。
parseInt
関数は、文字列引数の内容を指定された基数によって解釈した整数値を生成します。文字列の先頭のホワイトスペースは無視されます。基数がundefined
または0
である場合は10
と仮定されますが、数値が0x
または0X
の 2文字で始まる場合は例外で、この場合は基数が16
と仮定されます。
これは、ECMAScript 3 が 8進数の解釈を非推奨 (ただし許容) としていたのとは異なります。
2013年現在、多くの実装はまだこの仕様に対応していません。そして、古いブラウザーの対応が必要なので、つねに基数を指定してください。
場合によっては、値の整数への解析により厳密な方法を採るのも有効でしょう。
正規表現が役立ちます。
function filterInt(value) { if (/^[-+]?(\d+|Infinity)$/.test(value)) { return Number(value) } else { return NaN } } console.log(filterInt('421')) // 421 console.log(filterInt('-421')) // -421 console.log(filterInt('+421')) // 421 console.log(filterInt('Infinity')) // Infinity console.log(filterInt('421e+0')) // NaN console.log(filterInt('421hop')) // NaN console.log(filterInt('hop1.61803398875')) // NaN console.log(filterInt('1.61803398875')) // NaN
以下の例はいずれも 15
を返します。
parseInt('0xF', 16) parseInt('F', 16) parseInt('17', 8) parseInt(021, 8) parseInt('015', 10) // ただし `parseInt(015, 10)` は 13 を返す parseInt(15.99, 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(-15.1, 10) parseInt('-17', 8) parseInt('-15', 10) parseInt('-1111', 2) parseInt('-15e1', 10) parseInt('-12', 13)
以下の例はいずれも 4
を返します。
parseInt(4.7, 10) parseInt(4.7 * 1e22, 10) // 非常に大きな数によって 4 になる parseInt(0.00000000000434, 10) // 非常に小さな数によって 4 になる
以下の例は 1e+21(基数を含む) より大きいか、1e-7(基数を含む) より小さい場合は 1
を返します。(基数 10 を使用している場合)。
parseInt(0.0000001,10); parseInt(0.000000123,10); parseInt(1e-7,10); parseInt(1000000000000000000000,10); parseInt(123000000000000000000000,10); parseInt(1e+21,10);
以下の例は 224
を返します。
parseInt('0e0', 16)
{{jsxref("BigInt")}} の値は精度が落ちます。
parseInt('900719925474099267n') // 900719925474099300
parseInt
は数字の区切り文字は機能しません。
parseInt('123_456') // 123
仕様書 |
---|
{{SpecName('ESDraft', '#sec-parseint-string-radix', 'parseInt')}} |
{{Compat("javascript.builtins.parseInt")}}