Intl.NumberFormat.prototype.format()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2017.
Die Methode format()
von Intl.NumberFormat
Instanzen formatiert eine Zahl entsprechend der Lokal- und Formatierungsoptionen dieses Intl.NumberFormat
-Objekts.
Probieren Sie es aus
Syntax
format(number)
Parameter
number
-
Eine
Number
,BigInt
oder ein String, der formatiert werden soll. Strings werden auf die gleiche Weise wie bei der Zahlenumwandlung geparst, außer dassformat()
den exakten Wert verwendet, den der String darstellt, um den Verlust von Präzision bei der impliziten Umwandlung in eine Zahl zu vermeiden.
Hinweis: Ältere Versionen der Spezifikation parsten Strings als Number
.
Überprüfen Sie die Kompatibilitätstabelle für Ihren Browser.
Rückgabewert
Ein String, der die gegebene number
gemäß der Lokal- und Formatierungsoptionen dieses Intl.NumberFormat
-Objekts formatiert darstellt.
Hinweis: Meistens ist die Formatierung, die format()
zurückgibt, konsistent. Das Ergebnis kann jedoch je nach Implementierung variieren, sogar innerhalb derselben Locale — solche Variationen sind gewollt und von der Spezifikation erlaubt. Es kann auch vorkommen, dass es nicht dem entspricht, was Sie erwarten. Zum Beispiel könnte der String geschützte Leerzeichen verwenden oder von bidirektionalen Steuerzeichen umgeben sein. Sie sollten die Ergebnisse von format()
nicht mit festkodierten Konstanten vergleichen.
Beschreibung
Number
-Werte in JavaScript leiden an Präzisionsverlusten, wenn sie zu groß oder zu klein sind, was die Textdarstellung ungenau macht.
Wenn Sie Berechnungen mit ganzen Zahlen durchführen, die größer als Number.MAX_SAFE_INTEGER
sind, sollten Sie stattdessen ein BigInt
verwenden, da dies korrekt formatiert wird:
new Intl.NumberFormat("en-US").format(1234567891234567891); // 1,234,567,891,234,568,000
new Intl.NumberFormat("en-US").format(1234567891234567891n); // 1,234,567,891,234,567,891
Sie können auch sehr große Strings durchlaufen lassen, um sie als Dezimalstrings mit beliebiger Genauigkeit zu formatieren (wenn Sie Berechnungen mit den Daten durchführen, müssen Sie dennoch mit BigInt
arbeiten):
new Intl.NumberFormat("en-US").format("1234567891234567891"); // 1,234,567,891,234,567,891
Beispiele
Verwendung von format
Verwenden Sie die format
Getter-Funktion, um einen einzelnen Währungswert zu formatieren.
Das folgende Beispiel zeigt, wie man die Währung Rubel für ein russisches Locale formatiert:
const options = { style: "currency", currency: "RUB" };
const numberFormat = new Intl.NumberFormat("ru-RU", options);
console.log(numberFormat.format(654321.987));
// "654 321,99 ₽"
Verwendung von format mit map
Verwenden Sie die format
Getter-Funktion, um alle Zahlen in einem Array zu formatieren.
Beachten Sie, dass die Funktion an das Intl.NumberFormat
, von dem sie abgeleitet wurde, gebunden ist, sodass sie direkt an Array.prototype.map
übergeben werden kann.
Dies wird als historisches Artefakt betrachtet, als Teil einer Konvention, die für neue Funktionen nicht mehr befolgt wird, aber erhalten bleibt, um die Kompatibilität mit bestehenden Programmen zu gewährleisten.
const a = [123456.789, 987654.321, 456789.123];
const numberFormat = new Intl.NumberFormat("es-ES");
const formatted = a.map((n) => numberFormat.format(n));
console.log(formatted.join("; "));
// "123.456,789; 987.654,321; 456.789,123"
Verwendung von format mit einem String
Mit einem String können wir Zahlen, die größer als Number.MAX_SAFE_INTEGER
sind, ohne Genauigkeitsverlust angeben.
const numberFormat = new Intl.NumberFormat("en-US");
// Here the value is converted to a Number
console.log(numberFormat.format(987654321987654321));
// 987,654,321,987,654,300
// Here we use a string and don't lose precision
console.log(numberFormat.format("987654321987654321"));
// 987,654,321,987,654,321
Wir können auch die allgemeine "E"-Exponentsyntax für Dezimalstrings verwenden: #.#E#
.
Der untenstehende Code erstellt ein BigInt
, zwingt ihn zu einem String mit dem Suffix E-6
und formatiert ihn dann.
const numberFormat = new Intl.NumberFormat("en-US");
const bigNum = 1000000000000000110000n;
console.log(numberFormat.format(bigNum));
// "1,000,000,000,000,000,110,000"
// Format as a string using the `E` syntax:
console.log(numberFormat.format(`${bigNum}E-6`));
// "1,000,000,000,000,000.11"
Spezifikationen
Specification |
---|
ECMAScript Internationalization API Specification # sec-intl.numberformat.prototype.format |
Browser-Kompatibilität
BCD tables only load in the browser