最近遇到一个需求需要将数字每3位逗号隔开。
例如:1000 => 1,000
故书写了如下方法:
//数字处理为每3位逗号隔开
export const dealNumber = (num) => {
if (num != 0 && num) {
num = num + "";
let decimalsStr = "";
let splitList = num.split(".");
//先处理小数部分
if (splitList[1]) {
//如果有2位小数则保留2位,只有1位则添0
decimalsStr = decimalsStr.substring(0, 2).length == 2 ? decimalsStr.substring(0, 2) : decimalsStr.substring(0, 2) + "0";
}
//整数部分
//将整数部分拆解为单个数字的数组倒序,然后拼装为新的数组,每3位数字进行一次匹配
let intStrList = splitList[0].split("").reverse().join('').match(/(\d{1,3})/g);
//将匹配后的数组用,拼接,再拆解为单个数字的数组,反转为原先数组形式,拼接为完整数字
let intStr = intStrList.join(',').split('').reverse().join('');
return intStr + decimalsStr;
}
return num;
}
该方法对小数部分只是做了2位数的截取,并没有4舍5入,如果有这样的需求请修改小数部分。
需注意的是:整数部分是进行了2次反转后的结果,第一次反转是为了将数据每3个一组隔开,字符串的匹配是从左到右的,而数字的显示是从右到左每3位隔开的,所以第二次就是还原成原先的数字样式。