舉例:200000.00 格式化爲:200,000.00spa
const formatAmount=function (num) {
if(num)
{
console.log(num);
//將num中的$,去掉,將num變成一個純粹的數據格式字符串
num = num.toString().replace(/\$|\,/g,'');
//若是num不是數字,則將num置0,並返回
if(''==num || isNaN(num)){return 'Not a Number ! ';}
//若是num是負數,則獲取她的符號
var sign = num.indexOf("-")> 0 ? '-' : '';
//若是存在小數點,則獲取數字的小數部分
var cents = num.indexOf(".")> 0 ? num.substr(num.indexOf(".")) : '';
cents = cents.length>1 ? cents : '' ;//注意:這裏若是是使用change方法不斷的調用,小數是輸入不了的
//獲取數字的整數數部分
num = num.indexOf(".")>0 ? num.substring(0,(num.indexOf("."))) : num ;
//若是沒有小數點,整數部分不能以0開頭
if('' == cents){ if(num.length>1 && '0' == num.substr(0,1)){return 'Not a Number ! ';}}
//若是有小數點,且整數的部分的長度大於1,則整數部分不能以0開頭
else{if(num.length>1 && '0' == num.substr(0,1)){return 'Not a Number ! ';}}
//針對整數部分進行格式化處理,這是此方法的核心,也是稍難理解的一個地方,逆向的來思考或者採用簡單的事例來實現就容易多了
/*
也能夠這樣想象,如今有一串數字字符串在你面前,若是讓你給他家千分位的逗號的話,你是怎麼來思考和操做的?
字符串長度爲0/1/2/3時都不用添加
字符串長度大於3的時候,從右往左數,有三位字符就加一個逗號,而後繼續往前數,直到不到往前數少於三位字符爲止
*/
for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
{
num = num.substring(0,num.length-(4*i+3))+','+num.substring(num.length-(4*i+3));
}
//將數據(符號、整數部分、小數部分)總體組合返回
return (sign + num + cents);
}
}複製代碼