Web/JavaScript/Reference/Global objects/Intl/NumberFormat/formatToParts
The Intl.Numberformat.prototype.formatToParts() method allows locale-aware formatting of strings produced by NumberFormat formatters.
Syntax
Intl.NumberFormat.prototype.formatToParts(number)
Parameters
Return value
An Array of objects containing the formatted number in parts.
Description
The formatToParts() method is useful for custom formatting of number strings. It returns an Array of objects containing the locale-specific tokens from which it possible to build custom strings while preserving the locale-specific parts. The structure the formatToParts() method returns, looks like this:
[
{ type: "integer", value: "3" },
{ type: "group", value: "." },
{ type: "integer", value: "500" }
]
Possible types are the following:
- currency
- The currency string, such as the symbols "$" and "€" or the name "Dollar", "Euro" depending on how
currencyDisplayis specified. - decimal
- The decimal separator string (".").
- fraction
- The fraction number.
- group
- The group separator string (",").
- infinity
- The
Infinitystring ("∞"). - integer
- The integer number.
- literal
- Any literal strings or whitespace in the formatted number.
- minusSign
- The minus sign string ("-").
- nan
- The
NaNstring ("NaN"). - plusSign
- The plus sign string ("+").
- percentSign
- The percent sign string ("%").
- unit
- The unit string, such as the "l" or "litres", depending on how
unitDisplayis specified.
Examples
Comparing format and formatToParts
NumberFormat outputs localized, opaque strings that cannot be manipulated directly:
var number = 3500;
var formatter = new Intl.NumberFormat('de-DE', {
style: 'currency',
currency: 'EUR'
});
formatter.format(number);
// "3.500,00 €"
However, in many User Interfaces there is a desire to customize the formatting of this string. The formatToParts method enables locale-aware formatting of strings produced by NumberFormat formatters by providing you the string in parts:
formatter.formatToParts(number);
// return value:
[
{ type: "integer", value: "3" },
{ type: "group", value: "." },
{ type: "integer", value: "500" },
{ type: "decimal", value: "," },
{ type: "fraction", value: "00" },
{ type: "literal", value: " " },
{ type: "currency", value: "€" }
]
Now the information is available separately and it can be formatted and concatenated again in a customized way. For example by using Array.prototype.map(), arrow functions, a switch statement, template literals, and Array.prototype.reduce().
var numberString = formatter.formatToParts(number).map(({type, value}) => {
switch (type) {
case 'currency': return `<strong>${value}</strong>`;
default : return value;
}
}).reduce((string, part) => string + part);
This will make the currency bold, when using the formatToParts() method.
console.log(numberString);
// "3.500,00 <strong>€</strong>"
Specifications
| Specification |
|---|
| ECMAScript Internationalization API (ECMA-402)The definition of 'Intl.NumberFormat.prototype.formatToParts' in that specification. |
Browser compatibility
The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.
Update compatibility data on GitHub
| Desktop | Mobile | Server | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
Chrome
Full support 64 |
Edge
Full support 12 |
Firefox
Full support 58 |
IE
No support No |
Opera
Full support 51 |
Safari
Full support 13 |
WebView Android
Full support 64 |
Chrome Android
Full support 64 |
Firefox Android
Full support 58 |
Opera Android
Full support 47 |
Safari iOS
Full support 13 |
Samsung Internet Android
Full support 9.0 |
nodejs Full support 10.0.0 Full support 10.0.0 Notes' Before version 13.0.0, only the locale data for |
Legend
- Full support
- Full support
- No support
- No support
- Experimental. Expect behavior to change in the future.'
- Experimental. Expect behavior to change in the future.
- See implementation notes.'
- See implementation notes.
See also
Intl.NumberFormatIntl.NumberFormat.prototype.format- Formatting dates:
Intl.DateTimeFormat.prototype.formatToParts()
Intl.NumberFormat.prototype.formatToParts() by Mozilla Contributors is licensed under CC-BY-SA 2.5.