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.

* Some parts of this feature may have varying levels of support.

Die format()-Methode von Intl.NumberFormat-Instanzen formatiert eine Zahl entsprechend den Lokalisierungs- 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

js
format(number)

Parameter

number

Ein Number, BigInt oder ein String, der formatiert wird. Strings werden auf die gleiche Weise analysiert wie bei der Zahlumwandlung, außer dass format() den genauen Wert verwendet, den der String darstellt, wodurch ein Verlust der Präzision bei der impliziten Umwandlung in eine Zahl vermieden wird.

Hinweis: Ältere Versionen der Spezifikation analysierten Strings wie ein Number. Überprüfen Sie die Kompatibilitätstabelle für Ihren Browser.

Rückgabewert

Ein String, der die angegebene number nach den Lokalisierungs- und Formatierungsoptionen dieses Intl.NumberFormat-Objekts formatiert darstellt.

Hinweis: Meistens ist die Formatierung, die von format() zurückgegeben wird, konsistent. Trotzdem kann die Ausgabe zwischen Implementierungen variieren, sogar innerhalb derselben Lokalisierung – diese Variationen sind durch Design vorgesehen und von der Spezifikation erlaubt. Es ist auch möglich, dass die Ausgabe nicht Ihren Erwartungen entspricht. Zum Beispiel kann der String geschützte Leerzeichen enthalten oder von bidirektionalen Steuerzeichen umgeben sein. Sie sollten die Ergebnisse von format() nicht mit fest kodierten Konstanten vergleichen.

Beschreibung

Number-Werte in JavaScript leiden unter Präzisionsverlust, wenn sie zu groß oder zu klein sind, was die Textdarstellung ungenau macht. Wenn Sie Berechnungen mit Ganzzahlen durchführen, die größer als Number.MAX_SAFE_INTEGER sind, sollten Sie stattdessen ein BigInt verwenden, das korrekt formatiert wird:

js
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 übergeben, um sie als Dezimalzeichenkette mit beliebiger Präzision zu formatieren (wenn Sie Berechnungen mit den Daten durchführen, müssen Sie weiterhin mit BigInt arbeiten):

js
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. Der folgende Code zeigt, wie die Währung "Rubel" für eine russische Lokalisierung formatiert werden kann:

js
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 gebunden ist, aus dem sie stammt, sodass sie direkt an Array.prototype.map übergeben werden kann. Dies gilt als historisches Artefakt, als Teil einer Konvention, die für neue Funktionen nicht mehr befolgt wird, aber beibehalten wird, um die Kompatibilität mit bestehenden Programmen zu gewährleisten.

js
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 angeben, die größer als Number.MAX_SAFE_INTEGER sind, ohne dass Präzision verloren geht.

js
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"-Exponenten-Schreibweise für Dezimalstrings verwenden: #.#E#. Der folgende Code erstellt ein BigInt, wandelt es in einen String mit dem Suffix E-6 um und formatiert es dann.

js
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® 2025 Internationalization API Specification
# sec-intl.numberformat.prototype.format

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch