2009-06-30 58 views
1

我建立了一個前綴0整數的字符串,如果需要這樣的方式:快速的方式來建立字符串與整數前導0?

// myInt as input, for example: 101; 
List<string> sList = new List<string>(); 
string format = "00#"; // how to build format dynamicall? 
for(int i= 1; i <= myInt; i++) 
{ 
    sList.Add(i.ToString(format)); 
} 

預期的結果應該是:

001 
002 
... 
010 
... 
101 

如果我的整數數爲10或1000,怎麼能我動態地建立格式?

回答

11

如何"#".PadLeft(desiredWidth, '0')

你可以從myInt.ToString().Length得到desiredWidth - 有點難看,但它會工作:)

換句話說:

List<string> sList = new List<string>(); 
string format = "#".PadLeft(myInt.ToString().Length, '0'); 
for(int i= 1; i <= myInt; i++) 
{ 
    sList.Add(i.ToString(format)); 
} 

另外,您可以跳過格式字符串完全:

List<string> sList = new List<string>(); 
int desiredWidth = myInt.ToString().Length; 
for(int i= 1; i <= myInt; i++) 
{ 
    sList.Add(i.ToString().PadLeft(desiredWidth, '0')); 
} 
3

如何使用standard numeric format strings

List<string> sList = new List<string>(); 
string format = string.Format("D{0}", myInt.ToString().Length); 
for(int i= 1; i <= myInt; i++) 
{ 
    sList.Add(i.ToString(format)); 
} 
1

您不需要使用「00#」,「000」會做同樣的工作。

// myInt as input, for example: 101; 
List<string> sList = new List<string>(); 
string format = new string('0', myInt.ToString().Length); 
for(int i= 1; i <= myInt; i++) 
{ 
    sList.Add(i.ToString(format)); 
} 
2

您可以使用帶有ceil的log base 10來獲取數字的數字長度。

int i = 123; 
int len = Convert.ToInt32(Math.Ceiling(Math.Log10(i))); 

由於C#可以隱式地將int轉換爲double,所以它應該是可靠的。然後你可以避免字符串轉換。

我沒有在int上對ToString()進行基準測試,但它似乎可能會更好。

+0

但是,C#能否將Math.Ceiling(double)的結果隱式轉換爲int? – 2009-06-30 16:33:11