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

311 篇文章 3 订阅
205 篇文章 0 订阅

原文出处: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(/\.$/, '');        
    }


 

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值