一般对金额数字进行展示时,都会要求将其转换为千分位格式,如12345则转换为12,345。常见的处理方式有哪些?找了下相应的实现,大致有如下几种方式:
- 循环
- 正则表达式
- toLocaleString方法
循环
一般是将数值转换为字符串列表,然后对列表循环处理,找出该增加千分位符号(,)的位置,增加千分位符号。
function commafy(num) {
const str = (num + '').split('')
let result = [],
index = 0,
len = str.length - 1
while (len >= 0) {
if (index && index % 3 === 0) {
result.push(',')
}
result.push(str[len])
len--
index++
}
return result.reverse().join('')
}
commafy(1234567) // 1,234,567
可以看出循环的方式,数值3是循环计算的关键。
正则表达式
采用正则表达式的方式,往往是和replace方法一起使用。
function commafy(num) {
return (num + '').replace(/\d{1,3}(?=(\d{3})+$)/g, '$&,')
}
commafy(1234567) // 1,234,567
toLocalString方法
Number类型的toLocalString方法使用也很简单,不过需要注意浏览器(特别是IE)的兼容性。
function commafy(num) {
return num.toLocaleString()
}
commafy(1234567) // 1,234,567
数值增加千分位并不是很复杂,但是更多的不会仅仅是对整数的处理,还会包含小数的处理。
存在小数的情况下,可以将整数和小数拆分,分开处理完成后进行合并。