数字每隔三位加一个逗号

1,524 阅读2分钟
代码如下:
const number = 123456789.45654;

number.toLocaleString('zh', {    // "123,456,789.46"
    maximumFractionDigits: 2,
})

Number.prototype.toLocaleString()

numObj.toLocaleString([locales [, options]])

style

  • “decimal” 用于纯数字格式, 默认值;
  • “currency” 用于货币格式;
  • “percent” 用于百分比格式;
  • “unit” 用于单位格式
const num = 10000.888888;
num.toLocaleString('zh', { style: 'decimal' });   // "10,000.889"
num.toLocaleString('zh', { style: 'percent' });   // "1,000,089%"
num.toLocaleString('zh', { style: 'currency' });  // Uncaught TypeError: Currency code is required with currency style.
num.toLocaleString('zh', { style: 'unit'}); // Invalid unit argument for Number.prototype.toLocaleString() ''

style为decimal时,结果是纯数字格式,并且默认四舍五入保留了3位小数;

style为percent时,结果是百分比格式,并且默认四舍五入保留了2位小数;

style为currency时,报错了,因为缺少currency属性,加上之后看一下:

num.toLocaleString('zh', { style: 'currency', currency: 'CNY' }); // "¥10,000.89"
num.toLocaleString('zh', { style: 'currency', currency: 'USD' }); // "US$10,000.89"
num.toLocaleString('zh', { style: 'currency', currency: 'HKD' }); // "HK$10,000.89"

可以看出style为currenty,会在前面加上对应的钱币符号,并四舍五入保留两位小数。

style为unit时,也报错了,unit不能为'',加上之后看一下:

num.toLocaleString('zh', { style: 'unit', unit: 'second'}); // "10,000.889秒"
num.toLocaleString('zh', { style: 'unit', unit: 'mile'}); // "10,000.889英里"

可以看出style为unit,会在后面加上对应的单位,并四舍五入保留三位小数。

useGrouping

useGrouping:是否使用分组分隔符(即每三位一个逗号),默认为true,设置为false可以去掉逗号分隔符;

num.toLocaleString('zh', { style: 'currency', currency: 'CNY', useGrouping: false }); // "¥10000.89"

minimumIntegerDigits

使用的整数数字的最小数目(1 - 21,超过21位会转换为科学计数法),不够会在前面补零,默认为1

minimumFractionDigits

使用的小数位数的最小数目.可能的值是从 0 到 20

maximumFractionDigits

使用的小数位数的最大数目。可能的值是从 0 到 20

minimumSignificantDigits

使用的有效数字的最小数目。可能的值是从1到21;默认值是1

maximumSignificantDigits

使用的有效数字的最大数量。可能的值是从1到21;默认是 21

注意: 如果定义了 minimumSignificantDigits 或 maximumSignificantDigits 的任意一个属性,则忽略前三个的设置; 同时设置同组min和max时,如果min大于max的值会报错

num.toLocaleString('zh', {useGrouping: false, minimumIntegerDigits: 7}); // "0010000.889"
num.toLocaleString('zh', {useGrouping: false, minimumFractionDigits: 5}); // "10000.88889"
num.toLocaleString('zh', {useGrouping: false, maximumFractionDigits: 5}); // "10000.88888"
num.toLocaleString('zh', {useGrouping: false, minimumSignificantDigits: 13}); // "10000.88888800"
num.toLocaleString('zh', {useGrouping: false, maximumSignificantDigits: 7}); // "10000.89"
num.toLocaleString('zh', {useGrouping: false, maximumSignificantDigits: 3}); // "10000"

个人常用的就这些配置项,还有更多配置请到MDN查看