JS 将数字类型转化为没3个一个逗号的金钱格式

3345687687876789123

转化为:xxx,xxx,xxx


<script type="text/javascript">


window.onload = function(){
    //整个测试由小刀提供
    var testFun = function( callback, str ){
        var tipElem = document.createElement( 'div' ),
        startTime,
        duration = 0;
        for( var j = 5; j > 0; j-- ){
            startTime = +new Date();
            for( var i = 10000; i > 0; i-- ){
                callback();
            }
            duration = ((+new Date()) - startTime) + duration;
        }
        duration = (duration / 5).toFixed(0);
        tipElem.innerHTML = str + '总耗时:' + duration + ' ms';
        document.body.appendChild( tipElem );
    };


    var str = '3345687687876789123';


    var cuter1 = function( str ){//带刀
        var len = str.length,
        lastIndex,
        arr = [];
        while( len > 0 ){
            lastIndex = len;
            len -= 3;
            arr.unshift( str.substring(len, lastIndex) );
        }
        return arr.join(',');
    };


    var cuter2 = function( str ){//abcd
        return str.replace( /\B(?=(?:\d{3})+$)/g, ',' );
    };


    var cuter3 = function( str ){//前叔
        return str.replace(/(.*)(\d{3})$/,function(){
            if(arguments[1]&& arguments[2]){
                return arguments[1].replace(/(.*)(\d{3})$/,arguments.callee)+","+arguments[2];
            } else {
                return arguments[0];
            }
        });
    };


    var cuter4 = function( str ){//Alucelx
        return str.split('').reverse().join('').replace(/(\d{3})/g, '$1,').split('').reverse().join('');
    };


    var cuter5 = function( str ){//司徒正美
        var ret = [];
        while(str){
            str = str.replace(/\d{1,3}$/g,function(a){
                ret.unshift(a)
                return ""
            });
        }
        return ret.join(",");
    };
    var cuter6 = function( str ){//司徒正美
        var n = str.length % 3;
        if(n){
            return str.slice(0,n) +  str.slice(n).replace(/(\d{3})/g,',$1')
        }else{
            return str.replace(/(\d{3})/g,',$1').slice(1)
        }
    };
    var cuter7 = function(str){//司徒正美
                var ret = ""
                for(var i = 0, n = str.length, m = n %3 - 1; i < n; i++){
                    ret += str.charAt(i)
                    if( i % 3 === m ){
                        ret += ","
                    }
                }
                var e = ret.length - 1
                return ret.charAt(e) == "," ? ret.slice(0,e) : ret
   }
    var cuter8 = function(str){//[[valueOf]]
        var s2 = [].slice.call(str);
        for(var i=s2.length-3; i>0;i-=3){
            s2.splice(i, 0 ,',' );
        }
        return s2.join("")
    }
    var cuter9 = function(str){//听说
        var newStr= new Array(str.length+ parseInt(str.length/3));
        newStr[newStr.length-1]=str[str.length-1];
        var currentIndex=str.length-1;
        for(var i = newStr.length-1;i >= 0;i--) {
            if((newStr.length-i)%4==0)
            {
                newStr[i]=",";
            }else{
                newStr[i]=str[currentIndex--];
            }
        }
        return newStr.join("")
    }
    var cuter10 = function(str){//Rekey
        var  len = str.length, str2 = '', max = Math.floor(len / 3);
        for(var i = 0 ; i < max ; i++){
            var s = str.slice(len - 3, len);
            str = str.substr(0, len - 3);
            str2 = (',' + s) + str2;
            len = str.length;
        }
        str += str2;
        return str
    }
    //下面是性能测试
    testFun(function(){
        cuter1(str);
    }, '方法一' );


    testFun(function(){
        cuter2(str);
    }, '方法二' );


    testFun(function(){
        cuter3(str);
    }, '方法三' );


    testFun(function(){
        cuter4(str);
    }, '方法四' );


    testFun(function(){
        cuter5(str);
    }, '方法五' );
    testFun(function(){
        cuter6(str);
    }, '方法六' );
    testFun(function(){
        cuter7(str);
    }, '方法七' );
    testFun(function(){
        cuter8(str);
    }, '方法八' );
    testFun(function(){
        cuter9(str);
    }, '方法九' );
    testFun(function(){
        cuter10(str);
    }, '方法十' );
}
</script>

新能测试的结果为:

方法一总耗时:14 ms
方法二总耗时:9 ms
方法三总耗时:174 ms
方法四总耗时:34 ms
方法五总耗时:39 ms
方法六总耗时:7 ms
方法七总耗时:9 ms
方法八总耗时:30 ms
方法九总耗时:14 ms
方法十总耗时:4 ms



!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值