2010-06-09 52 views
1

是否有一種智能的方法將數字轉換爲字符串並自動添加零,因此長度與最大值相同?當長度較小時加上零字

這樣的:

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

但聰明

+0

請定義'maximum'的 – 2010-06-09 15:42:24

+2

可能重複[如何輸出整數前導零在JavaScript(http://stackoverflow.com/questions/2998784/how-to-output-integers-with -leading-in-javascript) – kennytm 2010-06-09 15:47:12

回答

4

有一百萬的方式,這就是其中之一,它實際上是相當有效的太..

更新2 下面是業務方案的問題

這將輸出的「第三次釋法代碼[ 「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,最大值= 30產生29個「0」,其次是「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,最大= 30產生2(30.toString的長度())「0」之後是「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

+0

這絕對是巧妙的,但我的印象是,你添加30「0」,不會最多需要2(地點的數量)? – sworoc 2010-06-09 15:18:48

+0

不,我正在添加29(30 - 「5」.length)。這是根據OP的要求,據我所見 – 2010-06-09 15:29:20

+0

那裏有'split()'的用途是什麼?這不是剛剛返回原來的輸入嗎? (我知道這是一個很好的答案;在這裏使用'unshift()'是很棒的。) – Pops 2010-06-09 15:35:31

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

如果是5個字符的字段(10,000),你會怎麼做? 您如何解釋零填充100? 1000? – sworoc 2010-06-09 15:05:46

+0

由op給出的循環只在0到30之間。 – 2010-06-09 15:10:10

+0

確實如此,但更智能意味着不需要重寫整個事情來做0到100,在這種情況下,您需要兩次檢查,一次<10和一次<100.只是說' – sworoc 2010-06-09 15:13:56

1

我不能完全肯定我明白你的意思是「聰明」,但我沒有找到這種靈活的零填充法(略作修改,由於@肖恩的評論;在代碼註釋礦):

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

+0

不是太有效率,因爲某種原因,它在n – 2010-06-09 15:27:29

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

上調用toString兩次'while(i--){}'是一種更簡單的方法,尤其是因爲您沒有對任何東西使用「i」塊內 – 2010-06-09 15:10:55

0
var zeroPad = "000"; 

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

如果你改變的ZEROPAD「0」的個數,並更改長度補償,這會爲但是你想大(顯然在合理範圍內)工作。不是最好的,但它的工作原理很簡單。

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 
1

,你可以問一下。谷歌的一個JavaScript實現sprintf()這可能在其他一些情況下很有用 - 但如果你只需要做這一個操作,這樣的功能會有點太多的開銷。

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); 
} 
+0

看起來非常有效VB風格... – nico 2010-06-09 16:49:04

+0

@nico Definitly不是最好的鏡頭 - @InfinitiesLoop有更好的解決方案:http://stackoverflow.com/questions/2998784/how-to-output-integers-with-leading -zeros-in-javascript/2998822#2998822 ...和@CMS也有一個很好的:http://stackoverflow.com/questions/2998784/how-to-output-integers-with-leading-zeros在javascript/2998874#2998874 我沒有彎曲JavaScript的肌肉相當長一段時間... – Filburt 2010-06-10 06:51:18

+0

不用擔心,我只是在開玩笑! :) – nico 2010-06-10 06:58:38

0

如果你正試圖確定如何你需要很多數字,做一個你將要轉換成字符串的最大數目的上限(log10),這會告訴你,假設你沒有任何東西在小數點右邊。

4

我認爲最快的方法就是不用循環。 就像是:

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

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

結果將是000182.讓我知道。

邁克爾