「这是我参与11月更文挑战的第21天,活动详情查看:2021最后一次更文挑战」
Hope is a good thing, maybe the best of things. And no good thing ever dies.
前言
通常我们前端拿到后端给的金额数据都是整数,此时就需要我们把它转为市面上标准的千分位显示格式,例如:将金额字符串转化为千分的顿号分隔形式 1.000.000。
题目
给你一个整数 n,请你每隔三位添加点(即 "." 符号)作为千位分隔符,并将结果以字符串格式返回。
示例 1:
输入:n = 987
输出:"987"
示例 2:
输入:n = 1234
输出:"1.234"
示例 3:
输入:n = 123456789
输出:"123.456.789"
示例 4:
输入:n = 0
输出:"0"
使用正则表达式
懒人正则法,直接使用正则去匹配替换想要的格式。
function toThousands (price) {
return (n || 0).toString().replace(/(\d)(?=(?:\d{3})+$)/g, '$1.');
}
使用字符串连接的方式
将整数转为字符串,然后去迭代字符串,每次截取长度为 3 的字符串和 . 拼接一起。
注意:只有字符串长度大于 3 的时候才去进行迭代拼接,否则直接返回即可。
/**
* @param {number} n
* @return {string}
*/
var thousandSeparator = function(num) {
var num = (num || 0).toString(), result = '';
while (num.length > 3) {
result = '.' + num.slice(-3) + result;
num = num.slice(0, num.length - 3);
}
if (num) { result = num + result; }
return result;
};
数组字符串拼接
将数字转换为字符串(toString())再打散成数组(split),如果直接数字转换为数组,就是一整个放进去了,不能单独取到每一位。然后通过循环,逐个倒着把数组中的元素插入到新数组的开头(unshift),第三次或三的倍数次,插入逗号,最后把新数组拼接成一个字符串
/**
* @param {number} n
* @return {string}
*/
var thousandSeparator = function(n) {
var arr_n=n.toString().split("");
var result=[];
var cs=0;
for(var i=arr_n.length-1;i>=0;i--){
cs++;
result.unshift(arr_n[i]);
if(!(cs%3)&&i!=0){ //i!=0 即取到第1位的时候,前面不用加逗号
result.unshift(".");
}
}
return result.join("")
};
方法三的字符串版
从头到尾都用字符串完成,不通过数组,即用charAt()获取子字符串,主要用到字符串拼接
/**
* @param {number} n
* @return {string}
*/
var thousandSeparator = function(n) {
var str_n=n.toString();
var result="";
var cs=0;
for(var i=str_n.length-1;i>=0;i--){
cs++;
result=str_n.charAt(i)+result;
if(!(cs%3)&&i!=0){
result="."+result;
}
}
return result
};
附:leetcode-cn.com/problems/th…
结语
如果这篇文章帮到了你,欢迎点赞👍和关注⭐️。
文章如有错误之处,希望在评论区指正🙏🙏
欢迎关注我的微信公众号,一起交流技术,微信搜索 🔍 :「 五十年以后 」