在看公司一個項目的JavaScript代碼時,發現一段JavaScript代碼,是把數字格式化成金額格式函數
好比: 測試
12345.678 格式化成 12,345.68this
看完代碼後,google了一下,發現原來這是個幾乎標準的寫法,把代碼寫在了Number的prototype下google
代碼以下spa
Number.prototype.numberFormat = function(c, d, t){ var n = this, c = isNaN(c = Math.abs(c)) ? 2 : c, d = d == undefined ? "." : d, t = t == undefined ? "," : t, s = n < 0 ? "-" : "", i = String(parseInt(n = Math.abs(Number(n) || 0).toFixed(c))), j = (j = i.length) > 3 ? j % 3 : 0; return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : ""); };
這個函數有3個參數,分別說明以下prototype
c => 小數點後面有幾位 (四捨五入到指定的位數)code
d => 小數點 符號 (.) , 把它做爲參數,是由於你能夠本身制定你所須要的符號,好比你能夠把 12345.678 格式化成 12,345#678 在這裏,用# 符號 而不是 . 符號orm
t => 千分位的符號 (,) 也就是格式化成12,345.68中的逗號 (,), 你能夠設置成任何你須要的符號, 好比 格式化成12@345.68 在這裏,用@符號 而不是 , 符號blog
測試ip
123456.789.numberFormat(2,'.',',') = 123,456.79
123456.789.numberFormat(2,'*','#') = 123#456*79