题目描述
数字金额格式化是一道考频非常高的题目,无论是实习还是校招都有可能考到这个题目,所以笔者希望大家都能搞懂这道题目,下面让我们来一起探索这道题目吧。
解题思路一(使用unshift)
- 首先将传入函数的数字通过toString方法转换为字符串,然后使用split进行分割。
- 定义一个计数器,用于辅助判断什么时候添加逗号。
- 倒序遍历添加数字和逗号。
function toThousands(num) {
// 首先将传入的数字进行分割
num = num.toString().split('.');
// 定义最终要返回的结果
const res = [];
let count = 0;
// 遍历每一个字符
for (let i = num[0].length - 1; i >= 0; i--) {
res.unshift(num[0][i]);
count++
if (count % 3 === 0 && i !== 0) {
res.unshift(',')
}
}
return num[1] ? res.join('') + '.' + num[1] : res.join('');
}
let b = 235673439.454;
console.log("二者是否相等:",b.toLocaleString() === toThousands(b));
console.log(b.toLocaleString());
console.log(toThousands(b));
// let test = 236471283572983412;
// console.log("二者是否相等:",test.toLocaleString() === toThousands(test));
// console.log(test.toLocaleString());
// console.log(toThousands(test));
解题思路二(使用正则)
function numFormat(num){
var res=num.toString().replace(/\d+/, function(n){ // 先提取整数部分
return n.replace(/(\d)(?=(\d{3})+$)/g,function($1){
return $1+",";
});
})
return res;
}
var a=1234567894532;
var b=673439.4542;
console.log(numFormat(a)); // "1,234,567,894,532"
console.log(numFormat(b)); // "673,439.4542"
题目反思
这个题目必须要倒着遍历,然后通过计数器辅助来进行添加逗号,是一个很不错的思路,指的我们反复学习揣摩。