Intl.NumberFormat.prototype.format()

基线 广泛可用

此功能已得到很好的建立,并且在许多设备和浏览器版本中都能正常工作。它自 2017 年 9 月.

报告反馈

试一试

语法

format() 方法是 Intl.NumberFormat 实例的一种方法,它根据此 Intl.NumberFormat 对象的 语言环境和格式化选项 格式化数字。
format(number)

js

参数

number

要格式化的 NumberBigInt 或字符串。字符串的解析方式与 数字转换 相同,只是 format() 将使用字符串表示的精确值,避免在隐式转换为数字时丢失精度。

注意:旧版本的规范将字符串解析为 Number。请查看兼容性表以了解您的浏览器。

返回值

一个字符串,表示根据此 Intl.NumberFormat 对象的语言环境和格式化选项格式化的给定 number

描述

注意:大多数情况下,format() 返回的格式是保持一致的。但是,即使在同一个语言环境中,输出也可能在不同的实现之间有所不同——输出的变化是设计使然,并且规范允许。输出结果也可能与您的预期不符。例如,字符串可能会使用不间断空格或被双向控制字符包围。您不应将 format() 的结果与硬编码常量进行比较。

format() 方法是 Intl.NumberFormat 实例的一种方法,它根据此 Intl.NumberFormat 对象的 语言环境和格式化选项 格式化数字。
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

JavaScript 中的 Number 值如果太大或太小,就会出现精度丢失,从而导致文本表示不准确。如果您要对大于 Number.MAX_SAFE_INTEGER 的整数进行计算,您应该使用 BigInt,它将正确格式化。

format() 方法是 Intl.NumberFormat 实例的一种方法,它根据此 Intl.NumberFormat 对象的 语言环境和格式化选项 格式化数字。
new Intl.NumberFormat("en-US").format("1234567891234567891"); // 1,234,567,891,234,567,891

示例

您还可以传入非常大的字符串,以任意精度的十进制字符串格式进行格式化(如果您要对数据进行计算,您仍然需要使用 BigInt)。

使用 format

format() 方法是 Intl.NumberFormat 实例的一种方法,它根据此 Intl.NumberFormat 对象的 语言环境和格式化选项 格式化数字。
const options = { style: "currency", currency: "RUB" };
const numberFormat = new Intl.NumberFormat("ru-RU", options);
console.log(numberFormat.format(654321.987));
// "654 321,99 ₽"

使用 format 获取器函数来格式化单个货币值。以下代码展示了如何为俄语语言环境格式化卢布货币。

将 format 与 map 一起使用

format() 方法是 Intl.NumberFormat 实例的一种方法,它根据此 Intl.NumberFormat 对象的 语言环境和格式化选项 格式化数字。
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 获取器函数来格式化数组中的所有数字。请注意,该函数绑定到从中获取它的 Intl.NumberFormat,因此可以直接传递给 Array.prototype.map。这被认为是一个历史文物,作为不再为新功能遵循的约定的一部分,但为了保持与现有程序的兼容性而保留下来。

将 format 与字符串一起使用

format() 方法是 Intl.NumberFormat 实例的一种方法,它根据此 Intl.NumberFormat 对象的 语言环境和格式化选项 格式化数字。
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

使用字符串,我们可以指定大于 Number.MAX_SAFE_INTEGER 的数字,而不会丢失精度。

format() 方法是 Intl.NumberFormat 实例的一种方法,它根据此 Intl.NumberFormat 对象的 语言环境和格式化选项 格式化数字。
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"

规范

我们还可以使用通用的“E”指数语法表示十进制字符串:#.#E#。以下代码创建了一个 BigInt,将其强制转换为以 E-6 结尾的字符串,然后将其格式化。
规范
# ECMAScript 国际化 API 规范

浏览器兼容性

sec-intl.numberformat.prototype.format

另请参阅