前端开发时经常会遇到需要把一个很大的金额或是银行卡号进行千位分割展示,这里分享两个常用的方法:循环遍历字符长度添加和正则替换(此方法仅适用于正整数)
let num = 123456789000;
function thousandSplit(number) {
let str = String(number) // 数字转换为字符串
let remainder = str.length % 3 // 计算字符串除3的余数
let res = '' // 保存插入千位符后的结果
for(let i = remainder; i < str.length; i = i + 3){
res = res + ',' + str.substr(i, 3)
}
// 余数为0,去掉第一个字符',' 余数不为0,从下标0截取remainder个字符并拼接到res前面
remainder === 0 ? res = res.substr(1) : res = str.substr(0, remainder) + res
return res
}
console.log(thousandSplit(num)) // 123,456,789,000
// 正则表达式实现 (?=\d) 前瞻性匹配替换,只匹配位置,不消耗字符
function thousandSplit2(num) {
return (num+"").replace(/\B(?=(\d{3})+$)/g, ",")
}
console.log(thousandSplit2(num)) // 123,456,789,000
如果要是带小数的千位分割
let num = 123456789000.01;
/*千分位转整数*/
function thousandsToNumber(str){
str = typeof(str) == "string" ? str : str.toString(); // 将传入参数转为字符串以做修改
return parseFloat(str.split(",").join(""));
}
/*整数 小数 封装千分位符*/
function numberToThousands(number, n) {
number = thousandsToNumber(number.toString()); // 转为字符串
n = /^[1-9]\d*$/.test(n) ? n : 0; //保留位数,传入的空或非正整数都保留0位
var num = (Math.round(number * (Math.pow(10, n))) / (Math.pow(10, n))).toString(); //保留小数位数
var rs = num.indexOf('.'); //分离成小数部分和整数部分
/*对不足位数的补零*/
if (rs < 0) {
rs = num.length;
num += '.';
}
while (num.length <= rs + n) {
num += '0';
}
var integer = num.split(".")[0];
var decimal = num.split(".")[1];
/*保留小数 不保留小数*/
return integer.toString().replace(/(\d{1,3})(?=(\d{3})+(?:$|\.))/g, '$1,') + (n && "." + decimal);
}
console.log(numberToThousands(num, 2)) // 123,456,789,000.01
标签:千位,res,number,插入,num,let,str,字符串,remainder
From: https://blog.csdn.net/m0_56344834/article/details/142184833