在JavaScript中推荐的零填充方法是什么?我想我可以构建一个自定义函数来填充零到类型转换的值,但我想知道是否有更直接的方法来做到这一点?

注意:这里的“zeroffilled”指的是数据库意义上的单词(其中数字5的6位零填充表示形式将是“000005”)。


当前回答

这是我写的一个angular提供程序,它利用了@profitehlolz的答案,但使用了内存,这样常用的pad长度-pad字符组合就不会不必要地调用数组构建连接:

angular.module('stringUtilities', [])
    .service('stringFunctions', [function() {
        this.padMemo={ };
        this.padLeft=function(inputString,padSize,padCharacter) {

            var memoKey=padSize+""+padCharacter;

            if(!this.padMemo[memoKey]) {

                this.padMemo[memoKey]= new Array(1 + padSize).join(padCharacter);
            }

           var pad=this.padMemo[memoKey];
           return (pad + inputString).slice(-pad.length);
       };
}]);

其他回答

如果npm在你的环境中可用,可以使用一些现成的包:www.npmjs.com/browse/keyword/zeropad。

我喜欢零填充。

安装

$ npm install zero-fill

使用

var zeroFill = require('zero-fill')

zeroFill(4, 1)      // '0001' 
zeroFill(4, 1, '#') // '###1' custom padding
zeroFill(4)(1)      // '0001' partials

这是我用来填充7个字符的数字。

("0000000" + number).slice(-7)

这种方法可能对大多数人来说已经足够了。

编辑:如果你想让它更通用,你可以这样做:

("0".repeat(padding) + number).slice(-padding)

编辑2:注意,自ES2017以来,你可以使用String.prototype.padStart:

number.toString().padStart(padding, "0")

我正在使用这个简单的方法

var input = 1000; //input any number
var len = input.toString().length;
for (i = 1; i < input; i++) {
  console.log("MyNumber_" + ('000000000000000' + i).slice(-len));
}

一些monkeypatching也可以工作

String.prototype.padLeft = function (n, c) {
  if (isNaN(n))
    return null;
  c = c || "0";
  return (new Array(n).join(c).substring(0, this.length-n)) + this; 
};
var paddedValue = "123".padLeft(6); // returns "000123"
var otherPadded = "TEXT".padLeft(8, " "); // returns "    TEXT"

要填充数字的末尾,使用num.toFixed

例如:

  document.getElementById('el').value = amt.toFixed(2);

这是我找到的最简单的解决办法,而且很有效。