【js】金钱格式化(每三位逗号分隔)的方法

我们在日常开发中后台返回的金钱常常只是一个数字,比如12345.67,这时需要做一下转化,把它变成12,345.67这样的金钱格式,我想到的方法如下:

function formatNum(num) {
    const numStr = num.toString().split('.'); //先转为字符串,再分开整数和小数部分
    let numInt = numStr[0]; // 整数部分
    let numDec = numStr.length > 1 ? '.'+numStr[1] : '.' ; // 小数部分,只有原数字存在小数点的时候,分割完长度才会大于1
    while (3 - numDec.length)  numDec += '0';  //补0,只有整数的补2个,有一位小数的补1个
    let resultInt = ''; //存储整数部分处理结果
    while (numInt.length > 3) {     //当剩余整数部分长度大于3时继续处理
        resultInt = ','+numInt.slice(-3)+resultInt;  //把后三位截出来,和处理结果拼在一起,前面加逗号
        numInt = numInt.slice(0, -3); // 剩下的部分是除去刚刚截掉的3位的部分
    }
    return numInt + resultInt + numDec; //结果是“剩余的不足3位的整数”+“处理好的整数结果”+“小数部分”
}

整体思路就是先拿到数据后,先把它当成字符串处理,通过小数点,分开整数和小数部分,然后处理整数部分,如果整数部分小于等于3位,直接用就可以啦,如果大于3位,那么就把这个整数最后3位先存起来且前面加上逗号,然后割掉这个整数的这3位,继续重复这个判断,每次截取的后三位都拼到上一次截取结果的前面,直到整数部分小于等于三位了,就可以和存储的结果拼在一起,再拼上小数部分就可以啦。
希望大家能有更好的方法~

你可能感兴趣的:(【js】金钱格式化(每三位逗号分隔)的方法)