美文网首页
对数字按金融惯例格式化

对数字按金融惯例格式化

作者: ifcode | 来源:发表于2015-05-04 00:49 被阅读134次

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

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

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

    相关文章

      网友评论

          本文标题:对数字按金融惯例格式化

          本文链接:https://www.haomeiwen.com/subject/qstifttx.html