javascript 數字逗號分隔、貨幣取消分隔、精度轉換控制

--先看看示例
 
(13223342.9269).toFixed(2)=13223342.93;
 
(13223342.9269).toLocaleString()=13,223,342.93;
 
formatNum(13223342.9269)=13,223,342.9269;
 
delFormat(13,223,342.9269)=13223342.9269;
 
//去掉逗號
function delFormat(str){
  return str.replace(/,/g,"");
}
 
//原版是這樣的

function formatNum(num)

if(!/^(/+|-)?(/d+)(/./d+)?$/.test(num)){alert("wrong!"); return num;}
var a = RegExp.$1, b = RegExp.$2, c = RegExp.$3;
var re = new RegExp().compile("(//d)(//d{3})(,|$)");
while(re.test(b)) b = b.replace(re, "$1,$2$3");
return a +""+ b +""+ c;
}

 

//網友修改版,給javascript裏所有的數字添加一個原型函數

Number.prototype.format = function(){ //給javascript裏所有的數字添加一個原型函數,叫format()
    if(!/^(/+|-)?(/d+)(/./d+)?$/.test(this)) { //用正則表達式給使用該函數的數字做測試,如果不符合[正負(可有可無)]、[數字(重複一次以上)]、[小數點(可有可無)、數字(可有可無)]的形式。
        return NaN; //返回Not A Number,終止。
    }
    var a = RegExp.$1, b = RegExp.$2, c = RegExp.$3; //否則將剛正則表達式裏的[]裏三部分放入a b c三個變量中
    var re = new RegExp(); //定義一個新的正則表達式變量re
    re.compile("(//d)(//d{3})(,|$)"); //給re內部編譯[一個數字]、[三個數字]、[,或者結束]的正則表達式,這裏我給改了下,原版在re = new RegExp()後面直接跟.compile的寫法Google Chrome的V8引擎認不出,Firefox和破IE倒都正常,所以分開寫了。這個問題查了一晚上才查出來 - -#,該死,世界上爲啥要有那麼多瀏覽器,真是夭折陽壽啊
    while(re.test(b)) { //循環測試第一個正則表達式中的第二部分,即正負號後,小數點前的部分,如果符合第二個正則。
        b = b.replace(re, "$1,$2$3"); //就執行將第二部分轉換爲三部分,並將第一部分之後加入逗號,直到循環測試正則失敗。有點繞口……
    }
    return a +""+ b +""+ c; //最後拼接返回第一個正則的三部分。
}

用的時候只要調用1000000.format();就行了。超簡單。

我把alert()給去掉了,這東西太煩,調試的時候一旦弄錯就老彈對話框。
第一個if return了NaN,一樣能引起警覺。
還把格式整理了下,可讀性稍微增強點。


 
發佈了20 篇原創文章 · 獲贊 16 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章