【JS格式化】数字转换千分位

2,798 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

千分位

千分位格式:999,999.9999

整数部分用逗号每三位数字隔开,小数部分不需要分隔

实现

1. toLocaleString

const value:number;
value.toLocaleString('en-us', { 
    maximumFractionDigits: 20, // 小数位最大保留位数:0-20
    minimumFractionDigits: 2 // 小数位最小保留位数:0-20
})

注意:只用于number类型

参考:MDN Number.prototype.toLocaleString()

2. Intl.NumberFormat

const value:number;
new Intl.NumberFormat('en-us', { 
    maximumFractionDigits: 20, // 小数位最大保留位数:0-20
    minimumFractionDigits: 2 // 小数位最小保留位数:0-20
}).format(value)

注意:只用于number类型

参考:MDN Intl.NumberFormat

3. 正则

整数部分格式化:

function format_with_regex(val) {
    var reg = /\d{1,3}(?=(\d{3})+$)/g;
    return (val + '').replace(reg, '$&,');
}

function format_with_regex(val) {
    var reg = /(\d)(?=(?:\d{3})+$)/g; 
    return (val + '').replace(reg, '$1,');
}

拼接小数部分:

const value:string;
const [int, fraction] = value.split('.');
return format_with_regex(int) + (!!fraction ? "." + fraction : '');

参考

数值转字符串遍历、substring、除法+求模 & 性能对比: 数值千分位,6种方法和性能对比,值得一看