是否有一種智能的方法將數字轉換爲字符串並自動添加零,因此長度與最大值相同?當長度較小時加上零字
這樣的:
for (var i=0; i<30; i++) {
var c = i.toString();
if (c.length == 1) {
c = '0'+=c;
}
}
但聰明
是否有一種智能的方法將數字轉換爲字符串並自動添加零,因此長度與最大值相同?當長度較小時加上零字
這樣的:
for (var i=0; i<30; i++) {
var c = i.toString();
if (c.length == 1) {
c = '0'+=c;
}
}
但聰明
有一百萬的方式,這就是其中之一,它實際上是相當有效的太..
更新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.unshift
和Array.join
我不能完全肯定我明白你的意思是「聰明」,但我沒有找到這種靈活的零填充法(略作修改,由於@肖恩的評論;在代碼註釋礦):
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
不是太有效率,因爲某種原因,它在n – 2010-06-09 15:27:29
var c=i.toString(), len=30-c.length;
while(len>0){
c='0'+c;
--len;
}
上調用toString兩次'while(i--){}'是一種更簡單的方法,尤其是因爲您沒有對任何東西使用「i」塊內 – 2010-06-09 15:10:55
var zeroPad = "000";
for(var i=0; i<30; i++) {
var output = zeroPad + i.toString();
output.substr(output.length - 2);
}
如果你改變的ZEROPAD「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
,你可以問一下。谷歌的一個JavaScript實現sprintf()
這可能在其他一些情況下很有用 - 但如果你只需要做這一個操作,這樣的功能會有點太多的開銷。
與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);
}
看起來非常有效VB風格... – nico 2010-06-09 16:49:04
@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
不用擔心,我只是在開玩笑! :) – nico 2010-06-10 06:58:38
如果你正試圖確定如何你需要很多數字,做一個你將要轉換成字符串的最大數目的上限(log10),這會告訴你,假設你沒有任何東西在小數點右邊。
我認爲最快的方法就是不用循環。 就像是:
var pad="000000";
var str="182"; //or any desired number here
var result=pad.slice(str.length)+str;
結果將是000182.讓我知道。
邁克爾
請定義'maximum'的 – 2010-06-09 15:42:24
可能重複[如何輸出整數前導零在JavaScript(http://stackoverflow.com/questions/2998784/how-to-output-integers-with -leading-in-javascript) – kennytm 2010-06-09 15:47:12