js金額格式化


開發中,經常前端與后台是有約定金額格式,但有時后台人員不遵守規則,經常返回的金額不按格式返回,導致前端顯示格式不統一被測試人員反饋成bug。

比如約定的金額同一個格式是元單位 0.00,后台卻返回 0元 1元,必須前端開發人員格式成0.00,1.00之類的。

下面自己擼的一個對元單位金額進行格式,歡迎測試。

/*
功能:對非標准0.00的元金額格式化成標准0.00格式
測試用例:
0/1/123/ => 0.00/1.00/123.00
0.12/0.2 => 0.12/0.20
123./0./1. => 123.00/0.00/1.00
.1/.12/ => 0.10/0.12
.123 => 0.12 
*/
function formatYuan(yuanMoney){

    if (typeof(yuanMoney) == "undefined"){
      return "0.00";
    }

    yuanMoney = yuanMoney + "";
    var yuanAmt = yuanMoney.trim();
    
    var reg = /^-?\d*(\.)?\d*?$/
    if( !reg.test(yuanAmt) ){
        //過濾: 非-或數字開頭的,多個點的
        console.log('test1 fails=>' + yuanAmt);
        return yuanAmt;
    }
    
    if( yuanAmt == '' || yuanAmt == '-' || yuanAmt == '.' || yuanAmt == '-.' ){
        // 過濾:特殊字符, - . -.
        console.log('test2 fails=>' + "0.00");
        return "0.00";
    }
    
    var ltZero = '';
    if( yuanAmt.charAt(0) == '-' ){
        // 拆開負號
        ltZero = '-';
        yuanAmt = yuanAmt.substr(1);
        console.log('hit start - =>' + yuanAmt);
    }
        
    // xxx. xxx.x xxx.xx xxx.xxx 009.2 0.9 || .x .xx .xxx 
    //reg = /^-?\d+\.\d*$/
    //if( reg.test(yuanAmt) || /^-?\.\d*$/.test(yuanAmt) ){
    if( /^\d*\.\d*$/.test(yuanAmt) ){
        // 處理:以小數點拆整數、小數判斷
        console.log("hit xxx.(xxx) =>" + yuanAmt);
        
        var idx = yuanAmt.indexOf('.'); // here must have dot
        //var step = yuanAmt.length - idx;
        
        var dotBefore = yuanAmt.substring(0,idx);
        var dotAfter = yuanAmt.substring(idx+1,yuanAmt.length);
        
        console.log('idx=' + idx );//+ ',step=' + step);
        console.log('before=' + dotBefore + ',after=' + dotAfter);
        
        switch(dotBefore.length){
            case 0:
                dotBefore = "0";
                break;
            case 1:
                break;
            default:
                // 去除多余的前導0
                dotBefore = dotBefore.replace(/^0+/,"");
                if( dotBefore.length == 0 ) dotBefore = "0";
                break;
        }
        
        switch(dotAfter.length){
            case 0:
                dotAfter = "00";
                break;
            case 1:
                dotAfter += "0";
                break;
            default:
                // 截取保留2位小數
                dotAfter = dotAfter.substr(0,2);
                break;
        }
        
        var result = ltZero + dotBefore + '.' + dotAfter;
        console.log(yuanAmt+'->'+result);
        // 校正負零
        if( result == '-0.00' ) result = '0.00'
        console.log('last0->'+result);
        return result;
    }
        
    // come here amount will Integer like -0010 909
    // 處理全部是整數情況
    var ret = yuanAmt;
    if( yuanAmt.length > 1 ){
        // 去除多余的前導0
        ret = yuanAmt.replace(/^0+/,"");    
        if( ret.length == 0 ) ret = "0";
        console.log(yuanAmt + '->' + ret);
    }    
    ret = ltZero + ret + '.00';
    if( ret == '-0.00' ) {
        // 校正負零
        ret = '0.00'
    }
    
    console.log('last->'+ret);
    return ret;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM