Warum müssen wir Radix verwenden?

Antworten:

101

Möglicherweise möchten Sie die Ganzzahl nicht immer in eine Basis-10-Zahl analysieren. Wenn Sie also den Radix angeben, können Sie andere Zahlensysteme angeben.

Der Radix ist die Anzahl der Werte für eine einzelne Ziffer. Hexidezimal wäre 16. Oktal wäre 8, Binär wäre 2 und so weiter ...

In der parseInt()Funktion gibt es verschiedene Möglichkeiten, um auf den Radix hinzuweisen, ohne ihn anzugeben. Diese können auch gegen Sie wirken, wenn der Benutzer eine Zeichenfolge eingibt, die einer der Regeln entspricht, dies aber nicht ausdrücklich bedeutet. Beispielsweise:

// 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
quelle
2
Also gibt parseInt ('0101') 101 oder 65?
Vivekh
7
@Vivekh - Es hat es 2011 unterstützt, als ich die Antwort ursprünglich gepostet habe. Ein kurzer Check in Google Chrome scheint darauf hinzudeuten, dass sie sich etwas geändert haben. parseInt('0101')kehrt jetzt zurück 101. Unterschiedliche Browser können sich jedoch unterschiedlich verhalten. Geben Sie immer den Radix an, um zuverlässige Ergebnisse zu erzielen.
Justin Niessner
@Vivekh - Sie können die aktuellste Dokumentation unter developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… sehen
Justin Niessner
Die neueste Dokumentation besagt, dass ES 5 angibt, dass kein Radix genauso behandelt werden soll wie das Übergeben einer 10, warnt Sie jedoch, es für die Unterstützung älterer Browser trotzdem weiterzugeben.
Juan Mendes
1
Ich habe immer parseInt(x, 0)aus irgendeinem Grund verwendet, an den parseInt(x, 10)ich mich
momentan
35

Wenn Sie eine Zeichenfolgennummer wie haben 0700und möchten, dass die Ausgabe eine Ganzzahl ist 700, müssen Sie angeben, parseInt()dass es sich eher um eine Dezimalzahl als um eine Oktalzahl handelt.

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

Hinweis: Ich habe nur die Hälfte Ihrer Frage beantwortet. Siehe andere für gute Definitionen dessen, was ein Radix tatsächlich ist.

Michael Berkowski
quelle
1
Auch binäre parseInt ('10101', 2)
Joe
1
console.log (parseInt ("0700")); kehrt zurück // 700 nicht 448.
Naren
@Naren Vor 8 Jahren war es 448 in der Browserkonsole, in der ich dies ausgeführt habe. In modernem Chrome und in Node habe ich heute auch 700 erhalten, aber vielleicht war es zu dieser Zeit ein undefiniertes Verhalten.
Michael Berkowski
7

Radix ist die Basis eines Zahlensystems. Es gibt unendlich viele numerische Systeme, aber diejenigen, mit denen die meisten Menschen vertraut sind, sind Basis 10 (dezimal) und Basis 2 (binär).

Numerische Werte können in verschiedenen Basen unterschiedlich interpretiert werden. Zum Beispiel kann die Zahl 10 in Binärform als 2 in Dezimalzahl dargestellt werden.

Im Fall von parseInt()können Sie mit dem Radix die zu verwendende Basis angeben. Standardmäßig wird ein Radix von 10 verwendet.

Der Radix sollte jedoch immer angegeben werden, auch wenn Basis 10 verwendet wird. Betrachten Sie den Fall von

parseInt("010") // Gibt 8 zurück

Auf den ersten Blick können Sie erwarten, dass die Anweisung 10 zurückgibt. Die explizite Verwendung des Radix hilft, Verwirrung zu vermeiden:

parseInt("010", 10) // Rückgabe: 10

George Cummins
quelle
4

Der Radix ist die Basisnummer des Zahlensystems: http://en.wikipedia.org/wiki/Radix

Normalerweise müssen Sie den Radix nur angeben, wenn Sie möchten, dass er sich von 10 unterscheidet. Genauer gesagt (von http://www.w3schools.com/jsref/jsref_parseInt.asp ):

Wenn der Radix-Parameter weggelassen wird, geht JavaScript von Folgendem aus:

Wenn die Zeichenfolge mit "0x" beginnt, ist der Radix 16 (hexadezimal). Wenn die Zeichenfolge mit "0" beginnt, ist der Radix 8 (oktal). Diese Funktion ist veraltet. Wenn die Zeichenfolge mit einem anderen Wert beginnt, beträgt der Radix 10 (dezimal).

Mathias Schwarz
quelle
2

Fügen Sie einfach einige zusätzliche Informationen hinzu, die die Frage klar beantworten:

Wenn radix undefiniert ist oder 0 ist (oder fehlt), geht JavaScript von Folgendem aus:

  • [...]
  • Wenn die Eingabezeichenfolge mit "0" beginnt, ist der Radix acht (oktal) oder 10 (dezimal). Welcher Radix genau gewählt wird, hängt von der Implementierung ab. ECMAScript 5 gibt an, dass 10 (dezimal) verwendet wird, dies wird jedoch noch nicht von allen Browsern unterstützt. Geben Sie daher bei Verwendung von parseInt immer einen Radix an.
  • [...]

Quelle: MDN parseInt ()

nmoliveira
quelle
2

Es ist nur meine Meinung, aber die Idee, dass "wir Radix verwenden müssen", ist schnell veraltet. Das Problem war vor einiger Zeit wirklich aktuell, da Personen außerhalb der IT-Welt normalerweise keine anderen Zahlenschreibweisen als Dezimalzahlen verwenden und häufig Dezimalzahlen wie "010" mit Nullen auffüllen. Da ECMAScript 6-Oktalzahlen in JS jedoch "0o" und nicht nur "0" vorangestellt sind, wie dies in ECMAScript 5 und 3 der Fall war, können Sie Radix überspringen, wenn Sie nicht auf die IE-Familie abzielen (dies ist derzeit keine seltene Situation) sicher.

Konstantin Smolyanin
quelle
1

Der Radix-Parameter wird verwendet, um anzugeben, welches Zahlensystem verwendet werden soll. Ein Radix von 16 (hexadezimal) gibt beispielsweise an, dass die Zahl in der Zeichenfolge von einer Hexadezimalzahl auf eine Dezimalzahl analysiert werden soll.

Wenn der Radix-Parameter weggelassen wird, geht JavaScript von Folgendem aus:

Wenn die Zeichenfolge mit "0x" beginnt, ist der Radix 16 (hexadezimal)

Wenn die Zeichenfolge mit "0" beginnt, ist der Radix 8 (oktal). Diese Funktion ist veraltet

Wenn die Zeichenfolge mit einem anderen Wert beginnt, beträgt der Radix 10 (dezimal).

Quelle W3Schools

Jeremy Seekamp
quelle
1

Was ist Radix in paseInt ()?

Die parseInt()Funktion analysiert eine Zeichenfolge und gibt eine Ganzzahl zurück. Für den Radix ist ein zweites Argument erforderlich , das die Basis der Zahl in der Zeichenfolge angibt . Der Radix kann eine ganze Zahl zwischen 2und sein 36.

Der Funktionsaufruf sieht aus wie (Syntax):

parseInt(string, radix);

Einige Beispiele zur Verdeutlichung des Radix- Konzepts

Beispiel 1:

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

Die Radix- Variable sagt, dass "11" im Binärsystem oder Basis 2 ist . Daher konvertiert dieses Beispiel die Zeichenfolge "11" in eine Ganzzahl 3.

Beispiel 2:

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

Hier sagt der Radix , parseInt()dass 10011es sich um eine Hexadezimalzahl handelt, und daher wird sie in Ganzzahlen in konvertiert65553

Kurz gesagt, das Radix- Argument besagt, parseInt()dass die als 1. Parameter übergebene Zeichenfolge von einem bestimmten System stammt (binär, hexadezimal usw.) und als Endprodukt in eine Ganzzahl konvertiert werden muss.

mishsx
quelle