對數字按金融慣例格式化

這個例子我寫得非常爛,拿出來就是要鞭策自己加把勁,不懂的東西太多了。

題目的要求是按金融慣例格式化數字。首先是只保留小數點后兩位,注意這里不進位,而是直接去掉多余的小數部分(你現在明白銀行是罪惡的了吧)
。然后是整數部分每隔三位就加入一個逗號,方便閱讀大數字。幾個例子:

2546.2562 --> '2,546.25'
1500.342626 --> '1,500.34'
100.2034 --> '100.2'

我的實現方法過于慘不忍睹,實在不忍直視:

var numberToMoney = function(n) {
  val = n.toString().split('.');
  
  var decimalPart = val[1].substr(0, 2);
  if ( (+decimalPart)%10 === 0 ) {
    decimalPart = decimalPart.substr(0, decimalPart.length-1);
  }
  
  var integerPart = val[0].split('');
  for (var i = integerPart.length -3; i > 0; i -= 3) {
    integerPart.splice(i, 0, ',');
  }
  integerPart = integerPart.join(''); 
  
  
  return integerPart + '.' + decimalPart;
};

實在不想點評了……就讓代碼隨風吧。

這里放一個高票答案:

function numberToMoney(n) {
  return String(Math.floor(n * 100) / 100).replace(/\B(?=(\d{3})+(?!\d))/g, ',')
}

跟這個比起來我寫的就是一坨shit啊一坨shit。

首先用Math.floor(n * 100) / 100)來去掉小數部分多余的位數。注意如果需要進位的話可以用一個內置方法number.toFixed(n)。然后一個正則直接插入逗號。

這個題目提醒了我正則的強大,不認真學一學的話就只能寫出跟shit一樣的代碼。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容