parseIntを呼び出すときに基数パラメーターを使用する必要があるのはなぜですか?


回答:


103

整数を10進数に解析する必要がない場合もあるため、基数を指定すると、他の数値システムを指定できます。

基数は、1桁の値の数です。16進数は16になります。8進数は8になり、2進数は2になります。

このparseInt()関数では、基数を指定せずに基数をヒントにするために実行できることがいくつかあります。これらは、ユーザーがルールの1つに一致するが、明示的にそうするつもりはない文字列を入力している場合にも、あなたに不利に働く可能性があります。例えば:

// Numbers with a leading 0 used a radix of 8 (octal) before ECMAScript 5.
// These days, browsers will treat '0101' as decimal.
var result = parseInt('0101');

// Numbers that start with 0x use a radix of 16 (hexidecimal)
var result = parseInt('0x0101');

// Numbers starting with anything else assumes a radix of 10
var result = parseInt('101');

// Or you can specify the radix, in this case 2 (binary)
var result = parseInt('0101', 2);

2
したがって、parseInt( '0101')は101または65を与えますか?
ヴィヴェーク2015

7
@ Vivekh-私が最初に回答を投稿したとき、2011年にそれを支持していました。Google Chromeで簡単にチェックすると、少し変更されていることがわかります。parseInt('0101')を返します101。ただし、ブラウザが異なれば動作も異なる場合があります。信頼できる結果を得るために、常に基数を含めてください。
Justin Niessner 2015

@ Vivekh-最新のドキュメントはdeveloper.mozilla.org/en-US/docs/Web/JavaScript/Reference/

最新のドキュメントでは、ES 5は、基数を10を渡すのと同じように扱うべきではないと指定していますが、古いブラウザのサポートのためにとにかくそれを渡すように警告しています。
フアンメンデス

1
私はいつも使用していたparseInt(x, 0)...と、この等しい私は今覚えていないことができますいくつかの理由でparseInt(x, 10)...私は今疑問に思って
オジー

35

のような文字列番号が0700あり、出力を整数にし700たい場合parseInt()は、8進数ではなく10進数であることを通知する必要があるためです。

console.log(parseInt("0700"));
// 448

// I really wanted decimal (base 10)
console.log(parseInt("0700", 10));
// 700

// What is this? Binary, Decimal, Octal?
console.log(parseInt("0110"));
// 72

// as binary
console.log(parseInt("0110", 2));
// 6
私はあなたの質問の半分しか答えなかったことに注意してください。基数が実際に何であるかの良い定義については、他の人を参照してください。


1
また、バイナリparseInt( '10101'、2)
Joe

1
console.log(parseInt( "0700")); は448ではなく// 700を返します。
Naren19年

@Naren 8年前、これを実行したブラウザコンソールでは448でした。最近のChromeとNodeでは、今日も700を取得しましたが、当時は未定義の動作だった可能性があります。
MichaelBerkowski19年

@MichaelBerkowski私は明らかにlately-その違いに気付いたES6 8進数で始まる0o代わりに0
SᴀᴍOnᴇᴌᴀ

7

基数は、記数法の基礎です。数値システムは無数にありますが、ほとんどの人がよく知っているのは、10進数(10進数)と2進数(2進数)です。

数値は、基数によって解釈が異なります。たとえば、2進数の10は、10進数の2として表すことができます。

の場合parseInt()、基数を使用すると、使用するベースを指定できます。デフォルトでは、基数10が使用されます。

ただし、基数10を使用する場合でも、基数は常に指定する必要があります。

parseInt("010") // 8を返します

一見すると、ステートメントが10を返すことを期待できます。基数を明示的に使用すると、混乱を避けるのに役立ちます。

parseInt("010", 10) //戻り値:10


4

基数は、記数法の基本番号です:http//en.wikipedia.org/wiki/Radix

通常、基数を10とは異なるものにする場合にのみ、基数を指定する必要があります。具体的には(http://www.w3schools.com/jsref/jsref_parseInt.aspから):

基数パラメーターが省略されている場合、JavaScriptは次のことを想定しています。

文字列が「0x」で始まる場合、基数は16(16進数)です。文字列が「0」で始まる場合、基数は8(8進数)です。この機能は非推奨です。文字列が他の値で始まる場合、基数は10(10進数)です。


2

質問に明確に答えるいくつかの追加情報を追加するだけです:

基数が未定義または0(または存在しない)の場合、JavaScriptは次のことを想定します。

  • [...]
  • 入力文字列が「0」で始まる場合、基数は8(8進数)または10(10進数)です。どの基数が選択されるかは、実装によって異なります。 ECMAScript 5は、10(10進数)が使用されることを指定していますが、すべてのブラウザーがまだこれをサポートしているわけではありません。このため、parseIntを使用する場合は、常に基数を指定してください。
  • [...]

ソース:MDN parseInt()


2

私の意見ですが、「基数を使う必要がある」という考えはすぐに時代遅れになります。ITの世界以外の人々は通常、10進数以外の数値表記を使用せず、「010」のようにゼロが埋め込まれた10進数を提供することが非常に多いため、問題は実際には少し前に発生しました。ただし、JSのECMAScript 6の8進数には、ECMAScript 5および3のように「0」だけでなく「0o」というプレフィックスが付いているため、IEファミリをターゲットにしない場合(現在は珍しい状況ではありません)、基数をスキップできます安全に。


1

基数パラメーターは、使用する記数法を指定するために使用されます。たとえば、基数16(16進数)は、文字列内の数値を16進数から10進数に解析する必要があることを示します。

基数パラメーターが省略されている場合、JavaScriptは次のことを想定しています。

文字列が「0x」で始まる場合、基数は16(16進数)です。

文字列が「0」で始まる場合、基数は8(8進数)です。この機能は非推奨です

文字列が他の値で始まる場合、基数は10(10進数)です。

ソースW3Schools


1

paseInt()の基数とは何ですか?

このparseInt()関数は文字列を解析し、整数を返します。基数の2番目の引数を取ります。これは、文字列内の数値基数指定します基数の間の整数であることができる236

関数呼び出しは次のようになります(構文):

parseInt(string, radix);

基数の概念を明確にするためのいくつかの例

例1:

var a = parseInt("11", 2);

基数変数は「11」であると述べている二元系、又はベース2。したがって、この例では、文字列「11」を整数3に変換します。

例2:

var a = parseInt("10011", 16);

ここで、基数parseInt()それ1001116進数であり、したがって整数であると伝えます。65553

基本的に、簡単に言えば、基数引数は、parseInt()1番目のパラメーターとして渡される文字列が特定のシステム(2進数、16進数など)のものであり、最終製品として整数に変換する必要があることを示します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.