国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

JavaScript 格式化數字、金額、千分位、保留幾位小數、舍入舍去

2024-05-06 15:36:47
字體:
來源:轉載
供稿:網友

前端開發中經常會碰到用 JavaScript?格式化數字,最最常見的是格式化金額,一般格式化金額需要千分位分隔,保留2位小數等等。

簡單的功能函數

類似的代碼網上有很多:

/** * 將數值四舍五入(保留2位小數)后格式化成金額形式 * * @param num 數值(Number或者String) * @return 金額格式的字符串,如'1,234,567.45' * @type String */function formatCurrency(num) {  num = num.toString().replace(//$|/,/g,'');  if(isNaN(num))    num = "0";  sign = (num == (num = Math.abs(num)));  num = Math.floor(num*100+0.50000000001);  cents = num%100;  num = Math.floor(num/100).toString();  if(cents<10)  cents = "0" + cents;  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);}

或者

function fmoney(s, n) {  /*   * 參數說明:   * s:要格式化的數字   * n:保留幾位小數   * */  n = n > 0 && n <= 20 ? n : 2;  s = parseFloat((s + "").replace(/[^/d/.-]/g, "")).toFixed(n) + "";  var l = s.split(".")[0].split("").reverse(),    r = s.split(".")[1];  t = "";  for (i = 0; i < l.length; i++) {    t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != l.length ? "," : "");  }  return t.split("").reverse().join("") + "." + r;}//調用fmoney(9.7,2);//9.70fmoney('12345.675910', 3);//12,345.676

更加完善的功能函數

這些代碼基本能很好的運行。不過關系到經濟利益的時候,還要考慮舍去或者舍入幾厘。大家懂的,每個用戶幾厘錢可能帶來巨大的經濟收益。就比如說收手續費,如果一筆手續費計算出來是 3.4521 元,精確到分一般都會收 3.46 元。當然如果是付出去,那可能就是直接舍去了,一般會計算為 3.45 元。

以前收集過類似方法,不過在使用的時候會有BUG,JS 浮點型計算的精度問題。所以抽時間修復了一下:

function number_format(number, decimals, dec_point, thousands_sep,roundtag) {  /*  * 參數說明:  * number:要格式化的數字  * decimals:保留幾位小數  * dec_point:小數點符號  * thousands_sep:千分位符號  * roundtag:舍入參數,默認 "ceil" 向上取,"floor"向下取,"round" 四舍五入  * */  number = (number + '').replace(/[^0-9+-Ee.]/g, '');  roundtag = roundtag || "ceil"; //"ceil","floor","round"  var n = !isFinite(+number) ? 0 : +number,    prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),    sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,    dec = (typeof dec_point === 'undefined') ? '.' : dec_point,    s = '',    toFixedFix = function (n, prec) {       var k = Math.pow(10, prec);      console.log();       return '' + parseFloat(Math[roundtag](parseFloat((n * k).toFixed(prec*2))).toFixed(prec*2)) / k;    };  s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');  var re = /(-?/d+)(/d{3})/;  while (re.test(s[0])) {    s[0] = s[0].replace(re, "$1" + sep + "$2");  }   if ((s[1] || '').length < prec) {    s[1] = s[1] || '';    s[1] += new Array(prec - s[1].length + 1).join('0');  }  return s.join(dec);}console.log(number_format(2, 2, ".", ","))//"2.00"console.log(number_format(3.7, 2, ".", ","))//"3.70"console.log(number_format(3, 0, ".", ",")) //"3"console.log(number_format(9.0312, 2, ".", ","))//"9.03"console.log(number_format(9.00, 2, ".", ","))//"9.00"console.log(number_format(39.715001, 2, ".", ",", "floor")) //"39.71"console.log(number_format(9.7, 2, ".", ","))//"9.70"console.log(number_format(39.7, 2, ".", ","))//"39.70"console.log(number_format(9.70001, 2, ".", ","))//"9.71"console.log(number_format(39.70001, 2, ".", ","))//"39.71"console.log(number_format(9996.03, 2, ".", ","))//"9996.03"console.log(number_format(1.797, 3, ".", ",", "floor"))//"1.797"            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 连江县| 鹤山市| 达拉特旗| 昌都县| 江源县| 法库县| 来凤县| 防城港市| 常德市| 共和县| 达日县| 科技| 靖江市| 利川市| 恩平市| 宁都县| 临高县| 铜山县| 淮安市| 曲周县| 奉贤区| 同仁县| 治县。| 阿图什市| 加查县| 望奎县| 陇南市| 永嘉县| 木兰县| 临清市| 乐亭县| 和林格尔县| 克拉玛依市| 怀来县| 专栏| 南昌县| 涿鹿县| 太保市| 郓城县| 洞口县| 株洲市|