Pourquoi avons-nous besoin d'utiliser le paramètre radix lors de l'appel de parseInt?

Réponses:

103

Vous ne voudrez peut-être pas toujours analyser l'entier en un nombre de base 10, donc fournir la base vous permet de spécifier d'autres systèmes de nombres.

La base est le nombre de valeurs pour un seul chiffre. Hexidecimal serait 16. Octal serait 8, Binary serait 2, et ainsi de suite ...

Dans la parseInt()fonction, vous pouvez faire plusieurs choses pour indiquer la base sans la fournir. Celles-ci peuvent également jouer contre vous si l'utilisateur entre une chaîne qui correspond à l'une des règles mais ne le veut pas expressément. Par exemple:

// 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);
Justin Niessner
la source
2
Donc parseInt ('0101') donne 101 ou 65?
Vivekh
7
@Vivekh - Il avait l'habitude de le soutenir en 2011 lorsque j'ai initialement publié la réponse. Une vérification rapide dans Google Chrome semble indiquer qu'ils ont un peu changé. parseInt('0101')revient maintenant 101. Cependant, différents navigateurs peuvent avoir un comportement différent. Incluez toujours la base pour des résultats fiables.
Justin Niessner
@Vivekh - Vous pouvez voir la documentation la plus récente sur developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Justin Niessner
La documentation la plus récente est que ES 5 spécifie qu'aucune base ne doit être traitée de la même manière que la transmission d'un 10, mais vous avertit de la transmettre de toute façon pour la prise en charge des navigateurs plus anciens.
Juan Mendes
1
J'ai toujours utilisé parseInt(x, 0)pour une raison dont je ne me souviens pas pour le moment .. est-ce égal à parseInt(x, 10)je me demande maintenant ...
OZZIE
35

Parce que si vous avez un numéro de chaîne comme 0700et que vous voulez que la sortie soit un entier, 700vous devez informer parseInt()qu'il s'agit d'un nombre décimal plutôt que octal.

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
Notez que je n'ai répondu qu'à la moitié de votre question. Voir d'autres pour de bonnes définitions de ce qu'est réellement un radix.

Michael Berkowski
la source
1
Aussi, binary parseInt ('10101', 2)
Joe
1
console.log (parseInt ("0700")); revient // 700 pas 448.
Naren
@Naren il y a 8 ans, il y en avait 448 dans n'importe quelle console de navigateur dans laquelle je l'ai utilisé. Dans Chrome moderne et dans Node, j'en ai aussi 700 aujourd'hui, mais c'était peut-être un comportement non défini à l'époque.
Michael Berkowski
@MichaelBerkowski J'ai remarqué cette différence récemment - apparemment les nombres octaux ES6 commencent par 0oau lieu de0
Sᴀᴍ
7

Radix est la base d'un système de numération. Il existe un nombre infini de systèmes numériques, mais ceux avec lesquels la plupart des gens sont familiers sont la base 10 (décimale) et la base 2 (binaire).

Les valeurs numériques peuvent être interprétées différemment dans différentes bases. Par exemple, le nombre 10 en binaire peut être représenté par 2 en décimal.

Dans le cas de parseInt(), la base vous permet de spécifier la base à utiliser. Par défaut, une base de 10 est utilisée.

Cependant, la base doit toujours être spécifiée, même lorsque vous utilisez la base 10. Prenons le cas de

parseInt("010") // Renvoie 8

À première vue, vous pouvez vous attendre à ce que l'instruction renvoie 10. L'utilisation explicite de la racine aidera à éviter toute confusion:

parseInt("010", 10) // Renvoie: 10

George Cummins
la source
4

La base est le numéro de base du système numérique: http://en.wikipedia.org/wiki/Radix

Normalement, vous n'avez besoin de spécifier la base que si vous voulez qu'elle soit différente de 10. Plus précisément (à partir de http://www.w3schools.com/jsref/jsref_parseInt.asp ):

Si le paramètre radix est omis, JavaScript suppose ce qui suit:

Si la chaîne commence par "0x", la base est 16 (hexadécimal). Si la chaîne commence par "0", la base est 8 (octal). Cette fonctionnalité est obsolète Si la chaîne commence par une autre valeur, la base est 10 (décimal)

Mathias Schwarz
la source
2

Il suffit d'ajouter quelques informations supplémentaires qui répondent clairement à la question:

Si radix est indéfini ou 0 (ou absent), JavaScript suppose ce qui suit:

  • [...]
  • Si la chaîne d'entrée commence par "0", la base est huit (octal) ou 10 (décimal). La base exacte choisie dépend de l'implémentation. ECMAScript 5 spécifie que 10 (décimal) est utilisé, mais tous les navigateurs ne le prennent pas encore en charge. Pour cette raison, spécifiez toujours une base lors de l'utilisation de parseInt.
  • [...]

Source: MDN parseInt ()

nmoliveira
la source
2

C'est juste mon avis, mais l'idée que "nous devons utiliser radix" devient rapidement obsolète. Le problème était réel il y a quelque temps, car les gens en dehors du monde informatique n'utilisent généralement pas de notations numériques autres que décimales et fournissent souvent des nombres décimaux remplis de zéro comme "010". Mais comme les nombres octaux ECMAScript 6 dans JS sont préfixés par «0o» et pas seulement par «0» comme c'était le cas dans ECMAScript 5 et 3. Donc, si vous ne ciblez pas la famille IE (ce n'est pas une situation rare maintenant), vous pouvez sauter radix sans encombre.

Konstantin Smolyanin
la source
1

Le paramètre radix est utilisé pour spécifier le système numérique à utiliser, par exemple, une base de 16 (hexadécimal) indique que le nombre dans la chaîne doit être analysé d'un nombre hexadécimal à un nombre décimal.

Si le paramètre radix est omis, JavaScript suppose ce qui suit:

Si la chaîne commence par "0x", la base est 16 (hexadécimal)

Si la chaîne commence par "0", la base est 8 (octal). Cette fonctionnalité est obsolète

Si la chaîne commence par une autre valeur, la base est 10 (décimal)

Source W3Schools

Jeremy Seekamp
la source
1

Qu'est-ce que radix dans paseInt ()?

La parseInt()fonction analyse une chaîne et renvoie un entier. Il prend un deuxième argument pour la base , qui spécifie la base du nombre dans la chaîne . La base peut être un entier compris entre 2et 36.

L'appel de fonction ressemble à (Syntaxe):

parseInt(string, radix);

Quelques exemples pour clarifier le concept de radix

Exemple 1:

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

La variable radix indique que "11" est dans le système binaire, ou base 2 . Par conséquent, cet exemple convertit la chaîne «11» en un entier 3.

Exemple 2:

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

Ici, la base indique parseInt()que 10011c'est un nombre hexadécimal et donc en entier, il est converti en65553

Fondamentalement, pour faire court, l' argument radix indique parseInt()que la chaîne passée en tant que 1er paramètre appartient à un système particulier (binaire, hexadécimal, etc.) et doit être convertie en un entier en tant que produit final.

mishsx
la source