zoukankan      html  css  js  c++  java
  • 一道面试题引起的好奇:数字千分位

      一道面试题引起的好奇:

        题目: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(/(?=(?!())(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
  • 相关阅读:
    uwsgi 的启动停止重启
    项目部署(Python3 + ubuntu 16.04(ali server) + Nginx + uWSGI + Django 1.11)
    阿里云连接上Mysql数据库(10061 errors)
    本地数据库上传到阿里云Mysql
    Django 用户的修改密码接口
    django 的忘记密码接口
    Git光速入门
    缓存问题:一致性、穿击、穿透、雪崩、污染
    redis进阶-高可用:主从复制详解
    Redis分片技术(Redis Cluster)
  • 原文地址:https://www.cnblogs.com/EnSnail/p/8477825.html
Copyright © 2011-2022 走看看