開發中,經常前端與后台是有約定金額格式,但有時后台人員不遵守規則,經常返回的金額不按格式返回,導致前端顯示格式不統一被測試人員反饋成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; }