JS将数字格式化成金融数字样式(千位分隔符,三位一个逗号间隔)


现在有这样一个需求

客户想要这个111222333444数字显示成这样111,222,333,444,即3个数字通过,分割,这也是金融上面经常出现的数字格式

方法一【原生】:我们需要两步操作:

这个方法最为简单,使用JS原生实现。toLocaleString在将数字转换为字符串的同时,会使用三位分节法进行显示。如果是浮点数,只保留小数点后三位数,并进行了四舍五入。如果对结果要求不高,这个算是最简单的实现。


方法二【正则表达式】:


利用正则表达式,也是代码量较少的一种方法。如果仅考虑整数,或指定位数的小数,可以更加简洁:

保留两位小数

num.toFixed(2).toString().replace(/(\d)(?=(\d{3})+\.)/g,"$1,");

保留整数

num.toFixed(0).toString().replace(/(\d)(?=(?:\d{3})+$)/g,"$1,");

方法三【字符串打散】:

把数字分成整数和小数两部分,然后把整数部分差成单字符数组,反向排列后每3位插入一个逗号(因为逗号是从后向前加)。然后再一次反向排列并合成字符串,加上小数部分就完成了。


如果有保留小数位数的要求,以上方法都可以对参数 num 使用 toFixed(n) 方法,toFixed() 方法可把 Number 四舍五入为指定小数位数的数字。参数 n 规定小数的位数,是 0 ~ 20 之间的值,包括 0 和 20,有些实现可以支持更大的数值范围。如果省略了该参数,将用 0 代替。

例如,保留两位小数: