2009-06-30 4 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の場合は、どのようにすることができます私はフォーマットを動的に構築しますか?別の方法としては、フォーマットをスキップすることができ

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

:ビットgrottyは、それがうまくいく:)

言い換えれば - どの程度"#".PadLeft(desiredWidth, '0')

あなたはmyInt.ToString().LengthからdesiredWidthを得ることができる

答えて

11

文字列全体:

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

数値の桁の長さを得るために、log base 10 ceilを使用できます。

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

C#はintを暗黙的にdoubleに変換できるため、信頼できるものでなければなりません。その後、文字列の変換を避けることができます。

私はToString()に対してintのベンチマークを行っていませんが、それは良いかもしれないようです。

+0

しかし、C#は暗黙的にMath.Ceiling(double)の結果をintに変換できますか? –

+0

また、それはより速いかもしれませんが、一度呼び出されるとどれくらい速くなりますか? –

+0

それは良い点です。 ここに入力しましたが、長さを取得するために変換が必要です。 もう1つの問題は、最大値が10^n(たとえば:100)で、nを得る(たとえば:2)場合、この場合は3ではないことです。 – opello

関連する問題