¿Por qué necesitamos usar el parámetro radix al llamar a parseInt?

Respuestas:

103

Es posible que no siempre desee analizar el número entero en un número de base 10, por lo que proporcionar la base le permite especificar otros sistemas numéricos.

La base es el número de valores de un solo dígito. Hexadecimal sería 16. Octal sería 8, Binario sería 2, y así sucesivamente ...

En la parseInt()función, hay varias cosas que puede hacer para insinuar la base sin proporcionarla. Estos también pueden funcionar en su contra si el usuario ingresa una cadena que coincide con una de las reglas pero que no tiene la intención expresa de hacerlo. Por ejemplo:

// 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
fuente
2
Entonces, ¿parseInt ('0101') da 101 o 65?
Vivekh
7
@Vivekh - Solía ​​respaldarlo en 2011 cuando publiqué originalmente la respuesta. Una comprobación rápida en Google Chrome parece indicar que han cambiado un poco. parseInt('0101')ahora vuelve 101. Sin embargo, los diferentes navegadores pueden tener un comportamiento diferente. Incluya siempre la base para obtener resultados fiables.
Justin Niessner
@Vivekh - Puede ver la documentación más actualizada en developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Justin Niessner
La documentación más reciente es que ES 5 especifica que ninguna base debe tratarse de la misma forma que pasar un 10, pero le advierte que debe pasarla de todos modos para compatibilidad con navegadores más antiguos.
Juan Mendes
1
Siempre lo he usado parseInt(x, 0)por alguna razón que no recuerdo en este momento ... ¿es esto igual a lo parseInt(x, 10)que me pregunto ahora ...?
OZZIE
35

Porque si tiene un número de cadena como 0700y desea que la salida sea un número entero 700, debe informar parseInt()que es un número decimal en lugar 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
Tenga en cuenta que solo respondí la mitad de su pregunta. Vea a otros para obtener buenas definiciones de lo que realmente es una raíz.

Michael Berkowski
fuente
1
Además, binary parseInt ('10101', 2)
Joe
1
console.log (parseInt ("0700")); está regresando // 700 no 448.
Naren
@Naren hace 8 años era 448 en cualquier consola de navegador en la que ejecuté esto. En Chrome moderno y en Node, también obtuve 700 hoy, pero tal vez fue un comportamiento indefinido en ese momento.
Michael Berkowski
@MichaelBerkowski Estaba notando esa diferencia últimamente, aparentemente los números octales de ES6 comienzan con en 0olugar de0
Sᴀᴍ el
7

Radix es la base de un sistema de numeración. Hay un número infinito de sistemas numéricos, pero los que la mayoría de las personas conocen son la base 10 (decimal) y la base 2 (binario).

Los valores numéricos se pueden interpretar de manera diferente en diferentes bases. Por ejemplo, el número 10 en binario se puede representar como 2 en decimal.

En el caso de parseInt(), la base le permite especificar la base que se utilizará. Por defecto, se usa una base de 10.

Sin embargo, siempre se debe especificar la base, incluso cuando se usa base 10. Considere el caso de

parseInt("010") // Devuelve 8

A primera vista, puede esperar que la declaración devuelva 10. El uso explícito de la base ayudará a evitar confusiones:

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

George Cummins
fuente
4

La raíz es el número base del sistema numérico: http://en.wikipedia.org/wiki/Radix

Normalmente, solo necesita especificar la base si desea que sea diferente de 10. Más específicamente (de http://www.w3schools.com/jsref/jsref_parseInt.asp ):

Si se omite el parámetro radix, JavaScript asume lo siguiente:

Si la cadena comienza con "0x", la base es 16 (hexadecimal). Si la cadena comienza con "0", la base es 8 (octal). Esta característica está en desuso Si la cadena comienza con cualquier otro valor, la base es 10 (decimal)

Mathias Schwarz
fuente
2

Simplemente agregando información adicional que responde claramente a la pregunta:

Si radix no está definido o es 0 (o está ausente), JavaScript asume lo siguiente:

  • [...]
  • Si la cadena de entrada comienza con "0", la base es ocho (octal) o 10 (decimal). Exactamente qué base se elige depende de la implementación. ECMAScript 5 especifica que se usa 10 (decimal), pero no todos los navegadores lo admiten todavía. Por esta razón, siempre especifique una base cuando use parseInt.
  • [...]

Fuente: MDN parseInt ()

nmoliveira
fuente
2

Es solo mi opinión, pero la idea de que "necesitamos usar radix" rápidamente se vuelve obsoleta. El problema era real hace algún tiempo porque las personas ajenas al mundo de las tecnologías de la información no suelen utilizar notaciones numéricas que no sean decimales y, con bastante frecuencia, proporcionan números decimales rellenados con ceros como "010". Pero dado que los números octales de ECMAScript 6 en JS tienen el prefijo "0o" y no solo "0" como estaba en ECMAScript 5 y 3. Entonces, si no se dirige a la familia IE (esa no es una situación rara ahora), puede omitir radix sin peligro.

Konstantin Smolyanin
fuente
1

El parámetro de la base se utiliza para especificar qué sistema numérico se utilizará, por ejemplo, una base de 16 (hexadecimal) indica que el número en la cadena debe analizarse de un número hexadecimal a un número decimal.

Si se omite el parámetro radix, JavaScript asume lo siguiente:

Si la cadena comienza con "0x", la base es 16 (hexadecimal)

Si la cadena comienza con "0", la base es 8 (octal). Esta función está obsoleta

Si la cadena comienza con cualquier otro valor, la base es 10 (decimal)

Fuente W3Schools

Jeremy Seekamp
fuente
1

¿Qué es radix en paseInt ()?

La parseInt()función analiza una cadena y devuelve un número entero. Se necesita un segundo argumento para la base , que especifica la base del número en la cadena . La base puede ser un número entero entre 2y 36.

La llamada a la función se parece a (Sintaxis):

parseInt(string, radix);

Algunos ejemplos para aclarar el concepto de radix

Ejemplo 1:

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

La variable de base dice que "11" está en el sistema binario, o base 2 . Por lo tanto, este ejemplo convierte la cadena "11" en un número entero 3.

Ejemplo 2:

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

Aquí, la raíz dice parseInt()que 10011es un número hexadecimal y, por lo tanto, en entero, se convierte en65553

Básicamente, en pocas palabras, el argumento radix dice parseInt()que la cadena pasada como primer parámetro es de un sistema en particular (binario, hexadecimal, etc.) y debe convertirse en un número entero como producto final.

mishsx
fuente