S002-数字转化为逗号金钱格式★
将数字12345678转化成RMB形式:12,345,678
思路:将字符串切割成数组再反转,遍历数组,加入辅助数组,当数组长度为3的倍数,再向辅助数组加入 ","。
let str = '131243512361';
function num(str) {
let arr = str.split('').reverse();
let newArr = [];
for(let i = 0;i < arr.length; i ++) {
newArr.push(arr[i])
if((i + 1) % 3 == 0) {
newArr.push(',')
}
}
if(arr.length % 3 == 0) {
let con = newArr.reverse().join('')
return con.slice(1,con.length)
} else {
return newArr.reverse().join('')
}
}
console.log(num(str))
2 正则版
function formatNumber(str) {
return str.replace(/\B(?=(\d{3})+(?!\d))/g, ',')
}
console.log(formatNumber("1234567890")) // 1,234,567,890
下面简单分析下正则/\B(?=(\d{3})+(?!\d))/g:
/\B(?=(\d{3})+(?!\d))/g:正则匹配边界\B,边界后面必须跟着(\d{3})+(?!\d); (\d{3})+:必须是1个或多个的3个连续数字; (?!\d):第2步中的3个数字不允许后面跟着数字; (\d{3})+(?!\d):所以匹配的边界后面必须跟着3*n(n>=1)的数字。 最终把匹配到的所有边界换成,即可达成目标。
3 toLocaleString
(123456789).toLocaleString('en-US') // 1,234,567,890
(123456789).toLocaleString()