一道面试题引起的好奇:数字千分位

  一道面试题引起的好奇:

    题目:12000000.11 如何将浮点数小数点左边的数每三位加一个逗号,如12,000,000.11?

   答案:

function commafy(num){
  return num && num.toString().replace(/(\d)(?=(\d{3})+\.)/g, function($1, $2){
    return $2 + ',';
  });
}
console.log(12000000.11) // 12,000,000.11
console.log(112000000.11) //
112,000,000.11
console.log(-112000000.11) // -112,000,000.11

  利用了字符串的replace方法及正则实现。

 用前向声明和分组,第二个()从后往前匹配3位数字,即$2。每匹配到一个$2就在后面加上逗号,返回。

 

    满足题目要求,但是实际中会存在数字不带小数点的情况,上面的实现方式就无法满足了。修改了一下,支持不带小数点的数字。

 用前向声明和非前向声明,从后往前匹配3位数字,向前声明的地方替换成逗号,但是如果刚好是3的倍数位,会第一位前面也加,,所以前面要再来个非前向声明。

// 数字千分位
function commafy (num) {
  if (isNaN(Number(num))) {
    return num
  }
  if (num && num.toString().indexOf('.') > 0) {
    return num.toString().replace(/(\d)(?=(\d{3})+\.)/g, ($0, $1) => {
      return $1 + ','
    })
  } else {
    return num && num.toString().replace(/(?=(?!(\b))(\d{3})+$)/g, ',')
  }
}
console.log(12000000.11) // 12,000,000.11
console.log(112000000.11) // 112,000,000.11
console.log(-112000000.11) // -112,000,000.11
 
  
console.log(12000000) // 12,000,000
console.log(112000000) // 112,000,000
console.log(-112000000) // -112,000,000

 

转载于:https://www.cnblogs.com/EnSnail/p/8477825.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值