字符串金额转化为指定格式的货币格式

时间:2021-04-26 03:55:02

前言

做金融项目的时候,接触的大量数字字符串往往需要格式化显示,这里我写了一个demo,将字符串金额格式化,可以保留小数位数,可以添加货币标识前缀。

写在string的原型里面,需要格式化的时候直接格式化呗!

例:'123345.23123'.moneyFormatter(2,'¥')

输出: '¥123,345.23'

demo有注释,我就不多做说明了

我的demo

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    //金额格式转化
    String.prototype.moneyFormatter = function(n,current){  //n为保留的小数点位数,不传则不处理,current为前面加上的货币符号,必须是字符串,例'$','¥'
        var moneyStr = this;
        if(moneyStr.indexOf('.') == -1){  //如果不是小数
            var len = moneyStr.length; //金额长度
            var arr = []; //保存分割后的字符串
            var num = Math.floor(len/3);//循环分割次数
            var firstLen = len%3;
            var firstStr = moneyStr.substr(0,firstLen); //分割的起始第一部分
            if(firstStr.length > 0){
                arr.push(firstStr);
            }
            for(var i=0;i<num;i++){ //后续部分循环
                arr.push(moneyStr.substr(i*3+firstLen,3))
            }
            if(current && typeof(current) == 'string'){
                return current + arr.join(','); //返回格式化后的字符串
            }else{
                return arr.join(','); //返回格式化后的字符串
            }

        }else{ //如果是小数
            if(n){ //如果传入了需要保留的小数位数
                moneyStr = String(Number(moneyStr).toFixed(n))
            }
            var moneyStr1 = moneyStr.split('.')[0]; //金额整数部分
            var moneyStr2 = moneyStr.split('.')[1]; //金额小数部分
            var len1 = moneyStr1.length; //金额整数部分长度
            var arr1 = []; //保存整数部分分割后的字符串
            var num1 = Math.floor(len1/3);//循环分割次数
            var firstLen1 = len1%3;
            var firstStr1 = moneyStr.substr(0,firstLen1); //分割的起始第一部分
            if(firstStr1.length > 0){
                arr1.push(firstStr1);
            }
            for(var i=0;i<num1;i++){ //后续部分循环
                arr1.push(moneyStr1.substr(i*3+firstLen,3))
            }
            var newMoneyStr1 = arr1.join(',');
            //整数部分处理完毕
            if(current && typeof(current) == 'string'){
                return current + newMoneyStr1+'.'+moneyStr2; //返回格式化后的字符串
            }else{
                return newMoneyStr1+'.'+moneyStr2; //返回格式化后的字符串
            }
        }
    }
</script>
</body>
</html>

 简介

 接受两次参数,n和current,不传则不处理,如果要传入需要指定顺序传入,先传n,n为需要保留几位小数,再传current为如果要加上货币前缀就直接传入!

方法内部默认是标准金钱展现形式,3位一个',',就不再进行参数灵活控制了!