Por que precisamos usar o parâmetro radix ao chamar parseInt?

91

O que radix realmente significa? Por que precisamos disso?

parseInt(10, radixValue); 
John Cooper
fonte
2
en.wikipedia.org/wiki/Radix
Christophe Roussy,

Respostas:

103

Você nem sempre deseja analisar o inteiro em um número de base 10, portanto, fornecer a raiz permite que você especifique outros sistemas numéricos.

A raiz é o número de valores para um único dígito. Hexidecimal seria 16. Octal seria 8, Binário seria 2 e assim por diante ...

Na parseInt()função, há várias coisas que você pode fazer para indicar o radical sem fornecê-lo. Isso também pode funcionar contra você se o usuário estiver inserindo uma string que corresponda a uma das regras, mas não tenha a intenção expressa de fazê-lo. Por exemplo:

// 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
fonte
2
Então parseInt ('0101') dá 101 ou 65?
Vivekh
7
@Vivekh - Costumava comprovar 2011, quando originalmente postei a resposta. Uma verificação rápida no Google Chrome parece indicar que eles mudaram um pouco. parseInt('0101')agora retorna 101. No entanto, navegadores diferentes podem ter comportamentos diferentes. Sempre inclua o radical para resultados confiáveis.
Justin Niessner
@Vivekh - Você pode ver a documentação mais atual em developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Justin Niessner
A documentação mais recente é que o ES 5 especifica que nenhum radix deve ser tratado da mesma forma que passar um 10, mas avisa para passá-lo de qualquer maneira para suporte a navegadores mais antigos.
Juan Mendes
1
Eu sempre usei parseInt(x, 0)por algum motivo que não consigo lembrar agora .. isso é igual a parseInt(x, 10)estou me perguntando agora ...
OZZIE
35

Porque se você tem um número de string como 0700e quer que a saída seja inteira, 700você precisa informar parseInt()que é um número decimal ao invés de 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
Observe que respondi apenas metade da sua pergunta. Veja outros para boas definições do que uma raiz realmente é.

Michael Berkowski
fonte
1
Além disso, parseInt binário ('10101', 2)
Joe
1
console.log (parseInt ("0700")); está retornando // 700, não 448.
Naren
@Naren, 8 anos atrás, era 448 em qualquer console do navegador em que executei isso. No Chrome moderno e no Node, também recebi 700 hoje, mas talvez fosse um comportamento indefinido na época.
Michael Berkowski
@MichaelBerkowski Eu estava percebendo essa diferença ultimamente - aparentemente os números octais ES6 começam com em 0ovez de0
Sᴀᴍ Onᴇᴌᴀ
7

Radix é a base de um sistema de numeração. Há um número infinito de sistemas numéricos, mas aqueles com os quais a maioria das pessoas está familiarizada são a base 10 (decimal) e a base 2 (binário).

Os valores numéricos podem ser interpretados de maneira diferente em diferentes bases. Por exemplo, o número 10 em binário pode ser representado como 2 em decimal.

No caso de parseInt(), o radical permite que você especifique a base a ser usada. Por padrão, um radical de 10 é usado.

No entanto, a raiz deve sempre ser especificada, mesmo quando usando a base 10. Considere o caso de

parseInt("010") // Retorna 8

À primeira vista, você pode esperar que a instrução retorne 10. O uso explícito do radix ajudará a evitar confusão:

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

George Cummins
fonte
4

O radix é o número base do sistema numérico: http://en.wikipedia.org/wiki/Radix

Normalmente, você só precisa especificar o radical se quiser que seja diferente de 10. Mais especificamente (de http://www.w3schools.com/jsref/jsref_parseInt.asp ):

Se o parâmetro radix for omitido, JavaScript assumirá o seguinte:

Se a string começa com "0x", a raiz é 16 (hexadecimal). Se a string começa com "0", a raiz é 8 (octal). Este recurso está obsoleto Se a string começar com qualquer outro valor, a raiz é 10 (decimal)

Mathias Schwarz
fonte
2

Basta adicionar algumas informações adicionais que respondem claramente à pergunta:

Se radix for indefinido ou 0 (ou ausente), JavaScript assume o seguinte:

  • [...]
  • Se a string de entrada começar com "0", a raiz é oito (octal) ou 10 (decimal). Exatamente qual raiz é escolhida depende da implementação. ECMAScript 5 especifica que 10 (decimal) é usado, mas nem todos os navegadores suportam isso ainda. Por esse motivo, sempre especifique uma raiz ao usar parseInt.
  • [...]

Fonte: MDN parseInt ()

nmoliveira
fonte
2

É apenas minha opinião, mas a ideia de que "precisamos usar radix" rapidamente se torna desatualizada. O problema realmente era real há algum tempo, porque as pessoas fora do mundo de TI geralmente não usam notações numéricas além de decimais e muitas vezes fornecem números decimais com zeros como "010". Mas como os números octais ECMAScript 6 em JS são prefixados por "0o" e não apenas "0" como era em ECMAScript 5 e 3. Portanto, se você não visar a família do IE (essa não é uma situação rara agora), você pode pular o radical com segurança.

Konstantin Smolyanin
fonte
1

O parâmetro raiz é usado para especificar qual sistema numeral a ser usado, por exemplo, uma raiz de 16 (hexadecimal) indica que o número na string deve ser analisado de um número hexadecimal para um número decimal.

Se o parâmetro radix for omitido, JavaScript assumirá o seguinte:

Se a string começar com "0x", a raiz é 16 (hexadecimal)

Se a string começar com "0", a raiz é 8 (octal). Este recurso está obsoleto

Se a string começar com qualquer outro valor, a raiz é 10 (decimal)

Fonte W3Schools

Jeremy Seekamp
fonte
1

O que é radix em paseInt ()?

A parseInt()função analisa uma string e retorna um inteiro. Leva um segundo argumento para a raiz , que especifica a base do número na string . A raiz pode ser um número inteiro entre 2e 36.

A chamada de função se parece com (sintaxe):

parseInt(string, radix);

Alguns exemplos para esclarecer o conceito de raiz

Exemplo 1:

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

A variável raiz diz que "11" está no sistema binário, ou base 2 . Portanto, este exemplo converte a string "11" em um número inteiro 3.

Exemplo 2:

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

Aqui, a raiz diz ao parseInt()que 10011é um número hexadecimal e, portanto, um inteiro, ele é convertido para65553

Basicamente, encurtando a história, o argumento raiz diz parseInt()que a string passada como primeiro parâmetro é de um sistema particular (binário, hexadecimal etc.) e precisa ser convertida em um inteiro como um produto final.

mishsx
fonte