前端JS:金额千分位格式化函数

举例:200000.00 格式化为:200,000.00spa

const formatAmount=function (num) {
    if(num)
    {
        console.log(num);

        //将num中的$,去掉,将num变成一个纯粹的数据格式字符串
        num = num.toString().replace(/\$|\,/g,'');
        //若是num不是数字,则将num置0,并返回
        if(''==num || isNaN(num)){return 'Not a Number ! ';}
        //若是num是负数,则获取她的符号
        var sign = num.indexOf("-")> 0 ? '-' : '';
        //若是存在小数点,则获取数字的小数部分
        var cents = num.indexOf(".")> 0 ? num.substr(num.indexOf(".")) : '';
        cents = cents.length>1 ? cents : '' ;//注意:这里若是是使用change方法不断的调用,小数是输入不了的
        //获取数字的整数数部分
        num = num.indexOf(".")>0 ? num.substring(0,(num.indexOf("."))) : num ;
        //若是没有小数点,整数部分不能以0开头
        if('' == cents){ if(num.length>1 && '0' == num.substr(0,1)){return 'Not a Number ! ';}}
        //若是有小数点,且整数的部分的长度大于1,则整数部分不能以0开头
        else{if(num.length>1 && '0' == num.substr(0,1)){return 'Not a Number ! ';}}
        //针对整数部分进行格式化处理,这是此方法的核心,也是稍难理解的一个地方,逆向的来思考或者采用简单的事例来实现就容易多了
        /*
          也能够这样想象,如今有一串数字字符串在你面前,若是让你给他家千分位的逗号的话,你是怎么来思考和操做的?
          字符串长度为0/1/2/3时都不用添加
          字符串长度大于3的时候,从右往左数,有三位字符就加一个逗号,而后继续往前数,直到不到往前数少于三位字符为止
         */
        for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
        {
            num = num.substring(0,num.length-(4*i+3))+','+num.substring(num.length-(4*i+3));
        }
        //将数据(符号、整数部分、小数部分)总体组合返回
        return (sign + num + cents);
    }
}复制代码
相关文章
相关标签/搜索