Start · Sprachen · JavaScript · Referenz · Number.prototype.toString()

Number.prototype.toString()

Methode

Die Methode <code>toString()</code> von <code>Number</code>-Werten gibt einen String zurück, der diesen Zahlenwert repräsentiert.

Kategorie: method-property

Signatur

toString() / toString(radix)

Beschreibung

Die Methode toString() von Number-Werten gibt einen String zurück, der diesen Zahlenwert repräsentiert.

Das Number-Objekt überschreibt die Methode toString von Object; es erbt nicht Object.prototype.toString(). Für Number-Werte gibt die Methode toString eine String-Darstellung des Wertes in der angegebenen Basis (radix) zurück.

Für Basen über 10 kennzeichnen die Buchstaben des Alphabets Ziffern größer als 9. Zum Beispiel werden für hexadezimale Zahlen (Basis 16) a bis f verwendet.

Wenn der angegebene Zahlenwert negativ ist, wird das Vorzeichen beibehalten. Das gilt auch, wenn die Basis 2 ist; der zurückgegebene String ist die positive binäre Darstellung des Zahlenwertes, dem ein --Zeichen vorangestellt ist, nicht das Zweierkomplement des Zahlenwertes.

Sowohl 0 als auch -0 haben "0" als String-Darstellung. Infinity gibt "Infinity" zurück und NaN gibt "NaN" zurück.

Wenn die Zahl keine ganze Zahl ist, wird der Dezimalpunkt . zur Trennung der Nachkommastellen verwendet. Wissenschaftliche Notation wird verwendet, wenn die Basis 10 ist und der Betrag der Zahl (ohne Vorzeichen) größer oder gleich 1021 oder kleiner als 10-6 ist. In diesem Fall gibt der zurückgegebene String immer explizit das Vorzeichen des Exponenten an.

Die zugrundeliegende Darstellung für Gleitkommazahlen ist wissenschaftliche Notation zur Basis 2 (siehe number encoding). Die Methode toString() verwendet jedoch nicht direkt diese präziseste Darstellung des Zahlenwertes. Stattdessen verwendet der Algorithmus die geringste Anzahl signifikanter Stellen, die notwendig ist, um die Ausgabe von benachbarten Zahlenwerten zu unterscheiden. Wenn die Zahl beispielsweise groß ist, gibt es viele äquivalente String-Darstellungen derselben Gleitkommazahl, und toString() wählt diejenige mit den meisten Nullen auf der rechten Seite (für die jeweils angegebene Basis).

Andererseits erlauben Number.prototype.toFixed() und Number.prototype.toPrecision() die Angabe der Präzision und können präziser als toString() sein.

Die Methode toString() erfordert, dass ihr this-Wert ein Number-Primitive oder Wrapper-Objekt ist. Sie wirft einen TypeError für andere this-Werte, ohne zu versuchen, sie in Zahlenwerte umzuwandeln.

Da Number keine [Symbol.toPrimitive]()-Methode besitzt, ruft JavaScript die Methode toString() automatisch auf, wenn ein Number-Objekt in einem Kontext verwendet wird, der einen String erwartet, wie z. B. in einem template literal. Number-Primitive-Werte konsultieren jedoch die Methode toString() nicht, um in Strings umgewandelt zu werden – sie werden direkt unter Verwendung desselben Algorithmus wie in der ursprünglichen toString()-Implementierung konvertiert.

Parameter

Name Typ Default Beschreibung
$radix number 10 Eine ganze Zahl im Bereich von 2 bis 36, die die Basis angibt, die für die Darstellung des Zahlenwertes verwendet werden soll. Standardwert ist 10.

Rückgabewert

Typ
string
Beschreibung
Ein String, der den angegebenen Zahlenwert repräsentiert. Wissenschaftliche Notation wird verwendet, wenn radix 10 ist und der Betrag der Zahl (ohne Vorzeichen) größer oder gleich 10^21 oder kleiner als 10^-6 ist.

Beispiele

toString() verwenden

const count = 10;
console.log(count.toString()); // "10"

console.log((17).toString()); // "17"
console.log((17.2).toString()); // "17.2"

const x = 6;
console.log(x.toString(2)); // "110"
console.log((254).toString(16)); // "fe"
console.log((-10).toString(2)); // "-1010"
console.log((-0xff).toString(2)); // "-11111111"

Basis von Zahlen-Strings umwandeln

const hex = "CAFEBABE";
const bin = parseInt(hex, 16).toString(2); // "11001010111111101011101010111110"

Wissenschaftliche Notation

console.log((10 ** 21.5).toString()); // "3.1622776601683794e+21"
console.log((10 ** 21.5).toString(8)); // "526665530627250154000000"

Präzisions-Verhalten

console.log((1000000000000000128).toString()); // "1000000000000000100"
console.log(1000000000000000100 === 1000000000000000128); // true

Überschreiben von toString bei Primitives vs. Objekten

Number.prototype.toString = () => "Overridden";
console.log(`${1}`); // "1"
console.log(`${new Number(1)}`); // "Overridden"

// Wichtig · Fallstricke

Ausnahmen:

  • RangeError – wird geworfen, wenn radix kleiner als 2 oder größer als 36 ist.
  • TypeError – wird geworfen, wenn diese Methode auf einem Objekt aufgerufen wird, das kein Number ist.

Hinweis zum Präzisionsverlust: Wenn der ursprüngliche Zahlen-String zu groß ist (größer als Number.MAX_SAFE_INTEGER zum Beispiel), sollte stattdessen ein BigInt verwendet werden. Der BigInt-Konstruktor unterstützt jedoch nur Strings, die Zahlenliterale repräsentieren (d. h. Strings, die mit 0b, 0o, 0x beginnen). Falls die ursprüngliche Basis keine von binär, oktal, dezimal oder hexadezimal ist, muss möglicherweise ein eigener Basiskonverter geschrieben oder eine Bibliothek verwendet werden.