长度较少时添加零

时间:2010-06-09 14:47:11

标签: javascript

有没有一种智能方法可以将数字转换为字符串并自动添加零长度与最大值相同?

像这样:

for (var i=0; i<30; i++) {
    var c = i.toString();
    if (c.length == 1) {
        c = '0'+=c;
    }
}

但更聪明

10 个答案:

答案 0 :(得分:4)

有一百万种方式,这是其中之一,它实际上也非常有效..

更新2 这是“OP问题的第三种解释”的代码

这将输出[“00”,“01”,“02”......,“30”]

var max = 30, i = max, maxLength = max.toString().length, num,  zeroes=[];
while (i--) zeroes.push("0");
zeroes = zeroes.join();

for (i=0; i < max ; i++) {
    num = i.toString();
    console.log(zeroes.substring(0, maxLength - num.length) + num);
}

UPDATE 1 根据OP问题的“可能”解释修改了代码。

如果你想要的是基于n = 5的代码,max = 30产生29“0”s后跟“5”那么这就是你想要的代码

var n = 5, max = 30;

var a = n.toString().split(), zeroesToAdd = max - a.length;
while(zeroesToAdd--) a.unshift("0");
var num = a.join("");

alert(num);​

如果你想要的是基于n = 5的代码,max = 30产生2(长度为30.toString())“0”s后跟“5”那么这就是你想要的代码

var n = 5, maxLength = (30).toString().length;

var a = n.toString().split(), zeroesToAdd = maxLength - a.length;
while(zeroesToAdd--) a.unshift("0");
var num = a.join("");

alert(num);​

唯一的区别在于第一行。

这些不使用字符串连接(效率极低),而是使用Array.unshiftArray.join

答案 1 :(得分:4)

我认为最快的方法是没有循环。 像那样:

var pad="000000";
var str="182"; //or any desired number here

var result=pad.slice(str.length)+str;

结果将是000182.请告诉我。

迈克尔

答案 2 :(得分:1)

我不完全确定我明白你的意思是“更聪明”,但我确实找到了这种灵活的零填充方法(由于@ Sean的评论略有修改;我的代码内评论):

function PadDigits(n, totalDigits)
{
    n = n.toString();
    var pd = '';
    // Figure out if we need to pad at all
    if (totalDigits > n.length)
    {
        // Construct a string of as many leading zeroes as needed
        for (i = 0; i < (totalDigits-n.length); i++)
        {
            pd += '0'; // String concat for EACH leading zero; inefficient
        }
    }
    // Add the leading zeroes to the string representing the original number
    return pd + n; // Removed unnecessary toString() here
}

来源:http://classicasp.aspfaq.com/general/how-do-i-pad-digits-with-leading-zeros.html

答案 3 :(得分:1)

你可以先问先生。谷歌的sprintf()的javascript实现可能在其他一些情况下有用 - 但如果你只需要做一次这样的操作,这样的功能将有点过多。

答案 4 :(得分:0)

for (var i=0; i<30; i++)
  var c = i < 10 ? '0'+i.toString() : i.toString() ;

答案 5 :(得分:0)

var c=i.toString(), len=30-c.length;
while(len>0){
   c='0'+c;
   --len;
  }

答案 6 :(得分:0)

var zeroPad = "000";

for(var i=0; i<30; i++) {
 var output = zeroPad + i.toString();
 output.substr(output.length - 2);
}

如果你改变了zeroPad中“0”的数量,并改变你的长度偏移量,这将适用于你想要的大(显然在合理范围内)。不是最好的,但它的工作原理很简单。

答案 7 :(得分:0)

这是如何做到的(参数化)

// number is the number you need to convert, and maxdigits is the total number of digits including the number
function leadingZeros( number, maxdigits )
{
 var number_text = number.toString();
 var number_len = number_text.length;

 for (var i=0;i<maxdigits-number_len;i++)
     number_text = '0'+number_text;

 return number_text;
}
// example leadingZeros(3,5)   will return 00003
// example leadingZeros(194,5) will return 00194

答案 8 :(得分:0)

来自4GuysFromRolla的礼貌,对于那些习惯于VBScript的人来说:

var padd = "000000000000000000000000000000";
var sourceval = 100;

alert(Right(padd + sourceval, 30));

function Right(str, n)
{
    if (n <= 0)
    {
        return "";
    }

    if (n > String(str).length)
    {
        return str;
    }

    var iLen = String(str).length;
    return String(str).substring(iLen, iLen - n);
}

答案 9 :(得分:0)

如果您正在尝试确定需要多少位数,请执行您要转换为字符串的最大数字的上限(log10),这将告诉您,假设您没有任何内容。小数点。