500 votes

Comment puis-je créer un Zerofilled valeur à l'aide de JavaScript?

Quelle est la méthode recommandée pour zerofill ne une valeur en JavaScript? J'imagine que je pourrais construire une fonction personnalisée pour compléter les zéros sur un typecasted valeur, mais je me demandais si il existe un moyen plus direct de faire cela?

Remarque: Par "zerofilled", je veux dire dans la base de données les sens du terme (un à 6 chiffres zerofilled représentation de la numéro 5 de "000005").

411voto

Seaux Points 1546

Je ne peux pas croire que tout le complexe des réponses ici...il suffit d'utiliser ceci:


var zerofilled = ('0000'+n).slice(-4);

337voto

profitehlolz Points 623

De façon Simple. Vous pouvez ajouter la chaîne de multiplication pour le pad et la transformer en une fonction.

var pad = "000000";
var n = '5';
var result = (pad+n).slice(-pad.length);

Comme une fonction,

function paddy(n, p, c) {
    var pad_char = typeof c !== 'undefined' ? c : '0';
    var pad = new Array(1 + p).join(pad_char);
    return (pad + n).slice(-pad.length);
}
var fu = paddy(14, 5); // 00014
var bar = paddy(2, 4, '#'); // ###2

280voto

Peter Bailey Points 62125

Note aux lecteurs!

Comme les commentateurs l'ont souligné, cette solution est "intelligent", et que solutions intelligentes sont souvent, c'est de mémoire intensive et relativement lent. Si la performance est une préoccupation pour vous, ne pas utiliser cette solution!

Une fonction simple est tout ce que vous devez

function zeroFill( number, width )
{
  width -= number.toString().length;
  if ( width > 0 )
  {
    return new Array( width + (/\./.test( number ) ? 2 : 1) ).join( '0' ) + number;
  }
  return number + ""; // always return a string
}

vous pourriez faire cuire ce dans une bibliothèque si vous souhaitez économiser de l'espace de noms ou de quoi que ce soit. Comme avec jQuery s étendre.

120voto

coderjoe Points 4240

J'ai effectivement eu à venir avec quelque chose comme cela récemment. Je disais qu'il y avait un moyen de le faire sans l'aide de boucles.

C'est ce que je suis venu avec.

function zeroPad(num, numZeros) {
	var n = Math.abs(num);
	var zeros = Math.max(0, numZeros - Math.floor(n).toString().length );
	var zeroString = Math.pow(10,zeros).toString().substr(1);
	if( num < 0 ) {
		zeroString = '-' + zeroString;
	}

	return zeroString+n;
}

Puis il suffit de l'utiliser en fournissant un certain nombre à zéro pad:

> zeroPad(50,4);
"0050"

Si le nombre est plus grand que le rembourrage, le nombre s'étendre au-delà de la marge:

> zeroPad(51234, 3);
"51234"

Les décimales sont trop belle!

> zeroPad(51.1234, 4);
"0051.1234"

Si vous n'avez pas l'esprit de polluer l'espace de noms global, vous pouvez l'ajouter directement le Numéro:

Number.prototype.leftZeroPad = function(numZeros) {
	var n = Math.abs(this);
	var zeros = Math.max(0, numZeros - Math.floor(n).toString().length );
	var zeroString = Math.pow(10,zeros).toString().substr(1);
	if( this < 0 ) {
		zeroString = '-' + zeroString;
	}

	return zeroString+n;
}

Et si vous préférez avoir des décimales de l'espace dans la marge:

Number.prototype.leftZeroPad = function(numZeros) {
	var n = Math.abs(this);
	var zeros = Math.max(0, numZeros - n.toString().length );
	var zeroString = Math.pow(10,zeros).toString().substr(1);
	if( this < 0 ) {
		zeroString = '-' + zeroString;
	}

	return zeroString+n;
}

Cheers!

21voto

jfriend00 Points 152127

Si le remplissage numéro est connu à l'avance de ne pas dépasser une certaine valeur, il y a une autre façon de faire cela avec pas de boucles:

var fillZeroes = "00000000000000000000";  // max number of zero fill ever asked for in global

function zeroFill(number, width) {
    // make sure it's a string
    var input = number + "";  
    var prefix = "";
    if (input.charAt(0) === '-') {
        prefix = "-";
        input = input.slice(1);
        --width;
    }
    var fillAmt = Math.max(width - input.length, 0);
    return prefix + fillZeroes.slice(0, fillAmt) + input;
}

Des cas de Test ici: http://jsfiddle.net/jfriend00/N87mZ/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X