JavaScript 数字格式化怎么写(#,##.00) (实用,赞)

原文出处:https://zhidao.baidu.com/question/588397625.html (代码已做调整)
代码如下:

 

    /* 
    * 格式化数字显示方式 
    * 用法 
    * formatNumber(12345.999,'#,##0.00'); 
    * formatNumber(12345.999,'#,##0.##'); 
    * formatNumber(123,'000000'); 
    * @param num 
    * @param pattern 
    */
    public formatNumber(num:number, pattern: string) {
        var fmtarr = pattern ? pattern.split('.') : [''];           // 格式化字串转为数组
        // 四舍五入处理
        var decimals = (fmtarr.length > 1 ? fmtarr[1].length : 0);  // 小数位
        num = Math.round(num * Math.pow(10, decimals)) / Math.pow(10, decimals);
        
        var strarr = num ? num.toString().split('.') : ['0'];       // 值->字符串->数组
        var retstr = '';

        // 整数部分 
        var str = strarr[0];
        var fmt = fmtarr[0];
        var i = str.length - 1;
        var comma = false;
        for (var f = fmt.length - 1; f >= 0; f--) {
            switch (fmt.substr(f, 1)) {
                case '#':
                    if (i >= 0) {
                        retstr = str.substr(i--, 1) + retstr;       // 加当前字符
                    }
                    break;
                case '0':
                    if (i >= 0) {
                        retstr = str.substr(i--, 1) + retstr;       // 加当前字符
                    }
                    else {
                        retstr = '0' + retstr;                      // 补0
                    }
                    break;
                case ',':
                    comma = true;                                   // 有千位符 
                    retstr = ',' + retstr;                          // 直接加上逗号(,)
                    break;
            }
        }    
        // 整数字符串替换格式后剩余字符串处理
        if (i >= 0) {
            if (comma) {
                var l = str.length;
                for (; i >= 0; i--) {
                    retstr = str.substr(i, 1) + retstr;
                    if (i > 0 && ((l - i) % 3) == 0) {
                        retstr = ',' + retstr;                      // 加上千位符
                    }
                }
            }
            else {
                retstr = str.substr(0, i + 1) + retstr;             // 无千位符直接加在前面
            }
        }

        retstr = retstr + '.';
        // 处理小数部分 
        str = strarr.length > 1 ? strarr[1] : '';
        fmt = fmtarr.length > 1 ? fmtarr[1] : '';
        i = 0;
        for (let f = 0; f < fmt.length; f++) {
            switch (fmt.substr(f, 1)) {
                case '#':
                    if (i < str.length) {
                        retstr += str.substr(i++, 1);               // 加当前字符
                    }
                    break;
                case '0':
                    if (i < str.length) {
                        retstr += str.substr(i++, 1);               // 加当前字符
                    }
                    else {
                        retstr += '0';                              // 补0 
                    }
                    break;
            }
        }

        // 返回
        // 1.去掉开头的逗号(,)和加号(+);2.结尾的小数点(.)
        return retstr.replace(/^,+/, '').replace(/\.$/, '');        
    }


 

猜你喜欢

转载自blog.csdn.net/chelen_jak/article/details/87935993