使用js如何巧妙的用0补足指定位数?

例如:指定返回字符串长度是4,操作数是5,如何将这个5,变为'0005'返回


谢谢大家的回答!回答里有好几种思路,受益匪浅,再次感谢大家的回答,谢谢!

阅读 57.6k
14 个回答
javascript//给数字字符串补零,不支持负数
function padNumber(num, fill) {
    //改自:http://blog.csdn.net/aimingoo/article/details/4492592
    var len = ('' + num).length;
    return (Array(
        fill > len ? fill - len + 1 || 0 : 0
    ).join(0) + num);
}

曾经拜读过在js中做数字字符串补0 这篇文章,受益匪浅,这个是在月影提供的版本上改进强壮了一点点的实现。
前辈们的思考值得我们学习。

function foo(str){
    str ='00000'+str;
    return str.substring(str.length-5,str.length);
}

不支持负数的话,可以这样:

    function zfill(num, size) {
    var s = "000000000" + num;
    return s.substr(s.length-size);
}
javascriptfunction preZeroFill (num, size) {
    if (num >= Math.pow(10, size)) { //如果num本身位数不小于size位
        return num.toString();
    } else {
        var _str = Array(size + 1).join('0') + num;
        return _str.slice(_str.length - size);
    }
}
preZeroFill(5, 4);

此方法借鉴自captainblue的回答,并做优化,给赞请给captainblue.

    function prefix(num, val) {
        return (new Array(num).join('0') + val).slice(-num);
    }
    new Array(4).join('0').concat(5) 
    function padLeft(number, size) {
        return number.toFixed(size - number.toString().length).replace('.', '').split('').reverse().join('');
    }
javascriptif (!String.prototype.zfill) {
    String.prototype.zfill = function(len) {
        if (len == undefined || typeof len != 'number' || this.length >= len) {return this.toString()}
        return Array(len - this.length + 1).join('0') + this;
    }
}
javascriptfunction prefix(size, num) {
    var sLen = ('' + num).length;
    if (sLen >= size) {
        return '' + num;
    }
    var preZero = (new Array(size)).join('0');

    return preZero.substring(0, size - sLen) + num;
}

参考了ls的答案。

//正整数前置0
var addZore=function(num,len){
    return Array(Math.abs(("" + num).length - ((len || 2) + 1))).join(0) + num
}

答案应当用上 位运算 , 下面是我给出的答案;
操作很骚 请做好;
var len = 100000; //-> 1 00000(5) 保留5位 如果想动态指定位数则可以使用
var len = Math.pow(10,5+1); //-> 5 是你需要动态的位数 加1 是多增加一倍
var v = 12345; //-> 这个是你需要转换的值
var res = (len | v).toString().substr(1); //-> 去掉首位的1
//-> 下面封装函数
/**

  • 函数还是由一定的限制性, len 不能超过19位 否则会出现 非预期的结果
  • @param val 需要0填充的值,
  • @param len 返回字符串的总长度

*/
function addZore(val,len){
return (Math.pow(10,len+1) | val).toString().substr(1);
}

//-> 此外你还可以这样 但是有兼容性问题
//-> 点击此处参考padStart的兼容性
function addZore(val,len){

return String(val).padStart(len,"0");

}

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏