目录

金额千位分割

背景

之前有个理财产品的需求,需要做到千位分割,也就是每三位一个逗号,目前想到的实现的方法有下面几种:

10000000->10, 000, 000

/**
 * 最经济实惠版
 * @param {*} num
 */
function splitStr(num) {
    if (!num || !Number(num)) return;
    return Number(num).toLocaleString();
}

/**
 * for循环
 * @param {*} num
 */
function splitStr(num) {
    if (!num || !Number(num)) return;
    let str = String(str);
    let newStr = "";
    const strLength = str.length;
    for (let i = 0; i < strLength; i++) {
        const eleStr = str[i];
        // 先拼接元素
        newStr += eleStr;
        // 先排除是最后一项 && 剩余元素数能整除3说明需要加‘,’
        if (strLength - 1 - i > 0 && (strLength - 1 + i) % 3 === 0) {
            newStr += ",";
        }
    }
    return newStr;
}

/**
 * 倒序循环
 * @param {*} num
 */
function splitStr(num) {
    if (!num || !Number(num)) return;
    let str = String(num);
    let newStr = "";
    const strLength = str.length;
    for (let i = strLength - 1; i >= 0; i--) {
        // 用charAt()方法通过传入索引获取值
        const cur = str.charAt(i);
        //i === 0的时候说明倒数到了第一位,所以要i>0 && 总长度减去当前位置,可以整除3说明刚好三位可以加','
        // 因为是倒序遍历,所以把上一次的结果拼接在后面
        if (i > 0 && (strLength - i) % 3 == 0) {
            newStr = `,${cur}${newStr}`;
        } else {
            newStr = `${cur}${newStr}`;
        }
    }
    return newStr;
}

/**
 * while循环版 和for正序循环思路类似
 * @param {*} num
 */
function splitStr(num) {
    if (!num || !Number(num)) return;
    let str = String(num);
    let newStr = "";
    let index = 0;
    while (index <= str.length - 1) {
        newStr +=
            index > 0 && (str.length - index) % 3 === 0 ?
            `,${str[index]}` :
            str[index];
        index++;
    }
    return newStr;
}
console.log(splitStr(1000000000));
Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.15.5