Perché è necessario utilizzare il parametro radix quando si chiama parseInt?


Risposte:


105

Potresti non voler sempre analizzare l'intero in un numero in base 10, quindi fornire la radice ti consente di specificare altri sistemi numerici.

La radice è il numero di valori per una singola cifra. Esidecimale sarebbe 16. Octal sarebbe 8, Binary sarebbe 2 e così via ...

Nella parseInt()funzione, ci sono diverse cose che puoi fare per suggerire la radice senza fornirla. Questi possono anche funzionare contro di te se l'utente sta inserendo una stringa che corrisponde a una delle regole ma non lo intende espressamente. Per esempio:

// 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
Quindi parseInt ('0101') restituisce 101 o 65?
Vivekh

7
@Vivekh - Lo supportava nel 2011 quando originariamente pubblicavo la risposta. Un rapido controllo in Google Chrome sembra indicare che sono cambiati leggermente. parseInt('0101')ora ritorna 101. Tuttavia, browser diversi possono avere un comportamento diverso. Includere sempre la radice per risultati affidabili.
Justin Niessner

@Vivekh - Puoi vedere la documentazione più aggiornata su developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Justin Niessner

La documentazione più recente è che ES 5 specifica che nessun radix deve essere considerato come passare un 10, ma ti avverte di passarlo comunque per il supporto del browser più vecchio.
Juan Mendes

1
L'ho sempre usato parseInt(x, 0)per qualche motivo che non ricordo in questo momento .. è uguale a parseInt(x, 10)me lo chiedo ora ...
OZZIE

36

Perché se hai un numero di stringa simile 0700e vuoi che l'output sia intero 700devi informare parseInt()che è un numero decimale anziché ottale.

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
Nota ho risposto solo a metà della tua domanda. Vedi altri per una buona definizione di cosa sia effettivamente una radice.


1
Inoltre, binary parseInt ('10101', 2)
Joe

1
console.log (parseInt ("0700")); sta tornando // 700 non 448.
Naren

@Naren 8 anni fa era 448 in qualunque console del browser in cui lo eseguissi. Nella moderna Chrome e in Node, ne avevo anche 700 oggi, ma forse all'epoca era un comportamento indefinito.
Michael Berkowski

@MichaelBerkowski stavo notando quella differenza ultimamente - apparentemente i numeri ottali ES6 iniziano con 0oinvece di0
Sᴀᴍ Onᴀᴍ

7

Radix è la base di un sistema di numerazione. Esistono un numero infinito di sistemi numerici ma quelli con cui la maggior parte delle persone ha familiarità sono la base 10 (decimale) e la base 2 (binario).

I valori numerici possono essere interpretati in modo diverso in basi diverse. Ad esempio, il numero 10 in binario può essere rappresentato come 2 in decimale.

Nel caso di parseInt(), la radice consente di specificare la base da utilizzare. Per impostazione predefinita, viene utilizzata una radice di 10.

Tuttavia, la radice dovrebbe essere sempre specificata, anche quando si usa la base 10. Considerare il caso di

parseInt("010") // Restituisce 8

A prima vista, potresti aspettarti che l'istruzione ritorni 10. L'uso esplicito della radice aiuterà a evitare confusione:

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


4

La radice è il numero di base del sistema numerico: http://en.wikipedia.org/wiki/Radix

Normalmente, devi solo specificare la radice se vuoi che sia diversa da 10. Più specificamente (da http://www.w3schools.com/jsref/jsref_parseInt.asp ):

Se il parametro radix viene omesso, JavaScript presuppone quanto segue:

Se la stringa inizia con "0x", la radice è 16 (esadecimale) Se la stringa inizia con "0", la radice è 8 (ottale). Questa funzioneè deprecata Se la stringa inizia con qualsiasi altro valore, la radice è 10 (decimale)


2

Basta aggiungere alcune informazioni aggiuntive che rispondono chiaramente alla domanda:

Se radix è undefined o 0 (o assente), JavaScript assume quanto segue:

  • [...]
  • Se la stringa di input inizia con "0", la radice è otto (ottale) o 10 (decimale). La base esatta scelta dipende dall'implementazione. ECMAScript 5 specifica che viene utilizzato 10 (decimale), ma non tutti i browser lo supportano ancora. Per questo motivo, specificare sempre una radice quando si usa parseInt.
  • [...]

Fonte: MDN parseInt ()


2

È solo una mia opinione, ma l'idea che "dobbiamo usare radix" diventa rapidamente obsoleta. Il problema era davvero reale qualche tempo fa perché le persone al di fuori del mondo IT di solito non usano notazioni numeriche diverse da quelle decimali e molto spesso forniscono numeri decimali con riempimento a zero come "010". Ma poiché i numeri ottali ECMAScript 6 in JS sono preceduti da "0o" e non solo da "0" come era in ECMAScript 5 e 3. Quindi se non scegli come target la famiglia IE (questa non è una situazione rara ora) puoi saltare radix sicuro.


1

Il parametro radice viene utilizzato per specificare quale sistema numerico utilizzare, ad esempio, una radice di 16 (esadecimale) indica che il numero nella stringa deve essere analizzato da un numero esadecimale a un numero decimale.

Se il parametro radix viene omesso, JavaScript presuppone quanto segue:

Se la stringa inizia con "0x", la radice è 16 (esadecimale)

Se la stringa inizia con "0", la radice è 8 (ottale). Questa funzionalità è obsoleta

Se la stringa inizia con un altro valore, la radice è 10 (decimale)

Fonte W3Schools


1

Cos'è radix in paseInt ()?

La parseInt()funzione analizza una stringa e restituisce un numero intero. Richiede un secondo argomento per la radice , che specifica la base del numero nella stringa . La radice può essere un numero intero compreso tra 2e 36.

La chiamata alla funzione è simile a (Sintassi):

parseInt(string, radix);

Alcuni esempi per chiarire il concetto di radix

Esempio 1:

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

La variabile radix dice che "11" è nel sistema binario, o in base 2 . Pertanto, questo esempio converte la stringa "11" in un numero intero 3.

Esempio 2:

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

Qui la radice dice parseInt()che 10011è un numero esadecimale e quindi in numero intero, viene convertito in65553

Fondamentalmente, per farla breve, l' argomento radix dice parseInt()che la stringa passata come primo parametro è di un particolare sistema (binario, esadecimale, ecc.) E deve essere convertito in un numero intero come prodotto finale.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.