zoukankan      html  css  js  c++  java
  • 一个奇怪的JS函数

    今天在分析一个jQuery插件源码的时候,发现了一个奇怪的函数。

    这个函数的目的是为数字补零,如传入7,输出07,传入12输出12。由于是对时间补零,只截取后两位。

    // add leading zeros
    var pad = function(x){return (1e15+""+x).slice(-2)};

    首先1e15是什么意思?

    也不是十六进制表示法。

    不管三七21,直接F12打开命令窗口,执行下看看,结果是1后面有15个0.

    原来1e15是科学计数法,表示1乘以10的15次方。

    var y=123e5; // 12300000
    var z=123e-5; // 0.00123

    +"" 是将数字转换为字符串。直接对数字进行slice截取是会报错的。

    这个函数的目的是前补零,

    关于补0的JS函数,stackoverflow有人提问过

    how-to-output-integers-with-leading-zeros-in-javascript

    本人总结出来几种方法:

    要点:
    对数字前补零,首先要将数字转换为字符串
     
    // 传统做法
    function pad(num, size) {
        var s = num+"";
        while (s.length < size) s = "0" + s;
        return s;
    }
     
    // 简洁的做法
    function pad(num, size){     
       return ('000000000' + num).substr(-size);
    }
     
    // 优雅的做法 修复后的
    function pad(a,b){
       // 1e15 即1后面15个0
       return (a+"").length > b ? a : (1e15+a+"").slice(-b)
    }
     
     
    // 扩展Number对象
    Number.prototype.pad = function(size) {
       var s = String(this);
       if(typeof(size) !== "number"){size = 2;}
     
       while (s.length < size) {s = "0" + s;}
       return s;
    }
     
    9.pad();  //returns "09"
    7.pad(3);  //returns "007"

    那么问题来了,e为什么是15呢?

  • 相关阅读:
    CentOS 7 如何设置默认启动方式为命令行模式
    Virtual Box配置CentOS7网络
    序列化后成对象转map,再添加到dataList
    centos7 ping: www.baidu.com: Name or service not known
    协议1
    idea查看接口方法实现
    centos关闭防火墙
    myeclipse配置svn
    eas固定ip避免多次申请许可
    jvm配置
  • 原文地址:https://www.cnblogs.com/mafeifan/p/3915855.html
Copyright © 2011-2022 走看看