千分位
2023年02月09日
方案一、分割循环遍历
思路: 数字转字符串,整数部分低位往高位遍历
-
数字转字符串,字符串按照
.
分割 -
整数部分拆分成字符串数组,并倒序
-
遍历,按照每
3
位添加.
号 -
拼接整数部分
+
小数部分
实现:
function formatThousands(value){
const valueCopy = String(value);
const cacheList = valueCopy.split(".");
const int = cacheList[0];
const fraction = cacheList[1] || "";
const intCacheList = int.split("");
let result = "";
intCacheList.reverse().forEach((value,index)=>{
if(index !==0 && index%3 === 0){
result = value + "," + result;
}else{
result = value + result;
}
});
return result + (!!fraction ? "." + fraction : "");
}
const num = 4453232566.988;
console.log(formatThousands(num));
方案二、截取循环遍历
思路: 数字转化成字符串,整数部分高位往低位遍历,三位分组
-
数字转字符串,并按照
.
分割 -
整数部分对
3
求模,获取多余部分 -
按照
3
截取,并添加 -
拼接整数部分
+
小数部分
实现:
function formatThousands(value) {
const valueCopy = String(value);
const cacheList = valueCopy.split(".");
const int = cacheList[0];
const fraction = cacheList[1] || "";
const intLen = int.length;
const extraLen = intLen % 3;
let result = int.substring(0, extraLen);
for (let i = 0; i < Math.floor(intLen / 3); i++) {
result += "," + int.substring(extraLen + i * 3, extraLen + (i + 1) * 3);
}
if (extraLen === 0) {
result = result.substring(1);
}
return result + (!!fraction ? "." + fraction : "");
}
const num = 4453232566.988;
console.log(formatThousands(num));
方案三、数值除法求模(性能最好)
思路: 求模的值添加,
,求余值(是否大于1
)计算是否能够结束
-
值对
1000
求模,获得最高三位 -
值除以
1000
,值是否大于1
判定是否结束 -
重复
1.2
,直到退出 -
拼接整数部分
+
小数部分
实现
function formatThousands(value) {
let numberValue = Number(value);
let temp;
let result = "";
do{
mod = numberValue % 1000;
numberValue = numberValue /1000;
temp = ~~mod;
result = (numberValue >= 1 ? `${temp}`.padStart(3,'0'):temp) + (!!result ? "," + result : "")
}while(numberValue >= 1)
let strValue = String(value);
let index = strValue.indexOf(".");
if(index !== -1){
result += strValue.substring(index);
}
return result;
}
const num = 4453232566.988;
console.log(formatThousands(num));
方案四、正则先行断言之回调函数
实现
function groupValue(value, index, flag) {
const reg = new RegExp(`\\d{1,${index}}(?=(\\d{${index}})+$)`, "g");
return String(value).replace(reg, function (match, ...args) {
return match + flag;
});
}
function formatThousands(value) {
const strValue = String(value);
const cacheList = strValue.split(".");
const int = cacheList[0];
const fraction = cacheList[1];
const result = groupValue(int, 3, ",");
return result + (!!fraction ? "." + fraction : "");
}
const num = 4453232566.9888;
console.log(formatThousands(num));
方案五、格式化函数 toLocalString(性能不好)
实现
function formatThousands(value){
const valueNumber = Number(value);
return valueNumber.toLocaleString("en-us");
}
const value = "2443434.3432432";
console.log(formatThousands(value));
方案六、格式化函数 Intl.NumberFormat(性能不好)
实现
function formatThousands(value){
return new Intl.NumberFormat("en-us").format(value);
}
const value = "2443434.3432432";
console.log(formatThousands(value));