(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;
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,一樣能引起警覺。
還把格式整理了下,可讀性稍微增強點。