2012-09-18 29 views
3

可能重複:
C# int ToString format on 2 char int?添加0,如果數量小於10

很抱歉的簡單,但是這一次是躲避箱。我有36個記錄的清單,如果id小於10,我需要它返回01,02,03 ... 09,而不是1,2,3 ... 9.

這是我迄今爲止的代碼,我原以爲這會起作用。這是C#.NET:

for (int i = 1; i <= 36; i++) 
{ 
    if (i.ToString().Length == 1) 
    { 
     i.ToString().PadLeft(2,'0'); 
    } 

    Response.Write("Test: " + i); 
} 

任何幫助將不勝感激,提前致謝!

+2

關閉,但你剛纔扔的結果了。 – harold

+0

請參閱我不喜歡關閉此問題,因爲問題是關於填充問題,OP與此無關的問題,具有諷刺意味的是,他做的是正確的,他只是沒有正確分配值。 – CaffGeek

+0

@CaffGeek問題是沒有人有同樣的問題將永遠看不到正確的答案,因爲問題不是問正確的事情。這可能會得到挽救,以解決正確的問題,但是你至少有1個答案沒有解決OP的實際問題 – psubsee2003

回答

13

你的問題是i仍然是一個整數,它需要被分配到一個字符串

for (int i = 1; i <= 36; i++) 
    { 
     var iString = i.ToString(); 

     if(iString.Length == 1) 
     { 
      iString = iString.PadLeft(2,'0'); //RIGHT HERE!!! 
     } 
     Response.Write("Test: " + iString); 
    } 

然而,大部分代碼是superflous,不需要if聲明。墊只能用零直到長度(2)。如果它已經有2個或更多的字符長度,它不會填充任何東西。所有你需要的是這個

for (int i = 1; i <= 36; i++) 
    { 
     var iString = i.ToString().PadLeft(2,'0'); 
     Response.Write("Test: " + iString); 
    } 

對於這個問題,變量不再需要。

for (int i = 1; i <= 36; i++) 
    { 
     Response.Write("Test: " + i.ToString().PadLeft(2,'0')); 
    } 

而且如果你將填充用零所有的時間,而不是其它的性格,你可能只是這樣做

for (int i = 1; i <= 36; i++) 
    { 
     Response.Write("Test: " + i.ToString("00")); 
    } 

你應該養成使用string.Format

的習慣
for (int i = 1; i <= 36; i++) 
    { 
     Response.Write(string.Format("Test: {0}", i.ToString("00"))); 
    } 
+0

...我重構了很多... – CaffGeek

+3

downvote?你一定是在開玩笑吧。 – CaffGeek

+0

+1 -nice在答案和重構中練習。也同意downvoter必須吸菸的東西...... jeez! –

2

你只是簡單地將我轉換爲字符串並丟棄結果。 在Response.Write("Test: " + i);您正在打印我而不是其轉換爲字符串。 嘗試:

for (int i = 1; i <= 36; i++) 
{ 
    if (i.ToString().Length == 1) 
    { 
      Response.Write(i.ToString().PadLeft(2,'0')); 
    } 
} 
4

您可以

var list = new List<string>(); 
for (int i = 1; i <= 36; i++) 
{ 
    var result = string.Empty; 
    if(i < 10) 
    { 
     result = string.Format("0{0}", i); 
    } 
    else 
    { 
     result = i.ToString(); 
    } 
    list.Add(result); 
} 

諾塔嘗試:你的毗連值nefore調用Response.Redirect的

+0

爲什麼不這樣做: if(i <10) –

+0

Response.Redirect ???你在說什麼 – CaffGeek

+0

@Tony是的,我加了這個條件(我<10) –

2

你沒有做任何事情與以下行:

i.ToString().PadLeft(2,'0'); 

i仍然只是一個整數,它的字符串表示當你以後使用它時,它的前面不會有0。 您需要保存稍後打印的值的字符串。

5

你不需要IF,使用的ToString

int i = 5; 

i.ToString("00"); //returns 05 
2

你不需要檢查i.ToString().Length == 1

for (int i = 1; i <= 36; i++)  
    Response.Write("Test: " + i.ToString().PadLeft(2,'0')); 

查找到PadLeft在MSDN澄清。共同特徵:

public string PadLeft(int totalWidth, char paddingChar) 

您也可以使用String.Format

for (int i = 1; i <= 36; i++)  
    Response.Write("Test: " + i.ToString("00")); 

另一種方式 - 使用LINQ

foreach (var number in Enumerable.Range(1, 36).Select(i => i.ToString("00"))) 
    Response.Write("Test: " + number);