对数字按金融惯例格式化

2015-05-04  本文已影响134人  ifcode

这个例子我写得非常烂,拿出来就是要鞭策自己加把劲,不懂的东西太多了。

题目的要求是按金融惯例格式化数字。首先是只保留小数点后两位,注意这里不进位,而是直接去掉多余的小数部分(你现在明白银行是罪恶的了吧)
。然后是整数部分每隔三位就加入一个逗号,方便阅读大数字。几个例子:

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一样的代码。

上一篇 下一篇

猜你喜欢

热点阅读