Intl.NumberFormat.prototype.format()
Baseline
Weitgehend verfügbar
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit September 2017 browserübergreifend verfügbar.
Die Methode format() von Intl.NumberFormat-Instanzen formatiert eine Zahl entsprechend den Gebiets- und Formatierungsoptionen dieses Intl.NumberFormat-Objekts.
Probieren Sie es aus
const amount = 654321.987;
const options1 = { style: "currency", currency: "RUB" };
const numberFormat1 = new Intl.NumberFormat("ru-RU", options1);
console.log(numberFormat1.format(amount));
// Expected output: "654 321,99 ₽"
const options2 = { style: "currency", currency: "USD" };
const numberFormat2 = new Intl.NumberFormat("en-US", options2);
console.log(numberFormat2.format(amount));
// Expected output: "$654,321.99"
Syntax
format(number)
Parameter
number-
Ein
Number, einBigIntoder ein String, der formatiert werden soll. Strings werden wie bei der Zahlenkonvertierung verarbeitet. Allerdings verwendetformat()den exakten Wert, den der String darstellt, und vermeidet so einen Präzisionsverlust durch die implizite Umwandlung in eine Zahl.
Hinweis:
Ältere Versionen der Spezifikation verarbeiteten Strings als Number.
Prüfen Sie die Kompatibilitätstabelle für Ihren Browser.
Rückgabewert
Ein String, der den angegebenen number-Wert entsprechend den Gebiets- und Formatierungsoptionen dieses Intl.NumberFormat-Objekts formatiert darstellt.
Hinweis:
Meist ist die von format() zurückgegebene Formatierung konsistent. Die Ausgabe kann jedoch zwischen Implementierungen variieren, selbst innerhalb desselben Gebietsschemas. Solche Unterschiede sind beabsichtigt und durch die Spezifikation erlaubt. Die Ausgabe entspricht möglicherweise auch nicht Ihren Erwartungen. Beispielsweise kann der String geschützte Leerzeichen enthalten oder von Steuerzeichen für bidirektionalen Text umgeben sein. Vergleichen Sie die Ergebnisse von format() daher nicht mit fest codierten Konstanten.
Beschreibung
Number-Werte verlieren in JavaScript an Präzision, wenn sie zu groß oder zu klein sind. Dadurch kann ihre Textdarstellung ungenau werden.
Wenn Sie Berechnungen mit ganzen Zahlen durchführen, die größer als Number.MAX_SAFE_INTEGER sind, sollten Sie stattdessen BigInt verwenden. Solche Werte werden korrekt formatiert:
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 Zahlen als Strings übergeben, damit sie als Dezimalzahlen mit beliebiger Präzision formatiert werden. Wenn Sie mit diesen Daten Berechnungen durchführen, müssen Sie dafür weiterhin BigInt verwenden:
new Intl.NumberFormat("en-US").format("1234567891234567891"); // 1,234,567,891,234,567,891
Beispiele
>format verwenden
Verwenden Sie die Getter-Funktion format, um einen einzelnen Währungsbetrag zu formatieren.
Der folgende Code zeigt, wie ein Rubelbetrag für ein russisches Gebietsschema formatiert wird:
const options = { style: "currency", currency: "RUB" };
const numberFormat = new Intl.NumberFormat("ru-RU", options);
console.log(numberFormat.format(654321.987));
// "654 321,99 ₽"
format mit map verwenden
Verwenden Sie die Getter-Funktion format, um alle Zahlen in einem Array zu formatieren.
Beachten Sie, dass die Funktion an die Intl.NumberFormat-Instanz gebunden ist, von der sie abgerufen wurde. Sie kann daher direkt an Array.prototype.map übergeben werden.
Dies gilt als historisches Artefakt: Die zugrunde liegende Konvention wird bei neuen Funktionen nicht mehr befolgt, bleibt aber aus Gründen der Kompatibilität mit bestehenden Programmen erhalten.
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"
format mit einem String verwenden
Mit einem String können Sie Zahlen angeben, die größer als Number.MAX_SAFE_INTEGER sind, ohne Präzision zu verlieren.
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
Sie können für Dezimal-Strings auch die allgemeine Exponentenschreibweise mit „E“ verwenden: #.#E#.
Der folgende Code erstellt einen BigInt, wandelt ihn in einen String mit dem Suffix E-6 um und formatiert ihn anschließend.
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
| Spezifikation |
|---|
| ECMAScript® 2027 Internationalization API Specification> # sec-intl.numberformat.prototype.format> |