2011-06-19 18 views
17

私は、特にフォーマットされた文字列に変換したい.NET/C#のintを持っています。.NETの文字列形式:整数を固定幅の文字列に変換しますか?

値が1の場合は、文字列を "001"にします。

10 = "010"。

116 = "116"

等...

私は、フォーマット文字列で、周りを見ていないが、これまでのところ成功しています。私も999以上の値を持っていません。

答えて

18

PadLeftを見てください。

例:

int i = 40; 

string s = i.ToString().PadLeft(3, '0'); 

S ==「040」

+0

完璧!ありがとうございました! – pearcewg

+0

メモリの意味は何ですか?他のメソッドを使用するよりもメモリ負荷が高くなりますか? –

+0

あまりにも悪いことではありませんが、以下のvcsjones解決策は、私の意見では良いです。そのために作成された文字列のインスタンスを少なくとも1つ少なくします。 – ingo

-3

私は、whileループを使用している。このような基準に一致する文字列の先頭に物事を追加する必要があったたびに。同様に:

while (myString.length < 5) myString = "0" + myString; 

これを行うにはstring.formatの方法があるかもしれませんが、これはこれまで私にとってはうまくいきました。

+3

組み込み関数を使用する方が、はるかに明確です。 – svick

39

これを実行する最も簡単な方法は、.NETが内蔵されています。このための機能は使用しません:

var r = 10; 
var p = r.ToString("000"); 

ループやパディングの必要はありません。

+0

はこのアプローチを知りませんでした。プラス1つ: – ingo

+0

負の数値の場合、これは4文字になります。たとえば-10は「-010」 – VoteCoffee

4

私はゼロでパッド番号に、このようなコードを見て思い出す...

int[] nums = new int[] { 1, 10, 116 }; 

foreach (int i in nums) 
{ 
    Console.WriteLine("{0:000}", i); 
} 

出力:

001 
010 
116 
+1

です。コンソールに出力する場合にのみ機能します。他の何かをしたいと思ったらどうしますか? – svick

+3

@svickそれはstring.Formatでもうまくいくでしょう – ingo

10

別のオプションは、次のようになります。

i.ToString("d3") 
+0

これは私にとっては役に立ちません。 – Brady

+0

@Bradyあなたはもっと具体的になりますか?それは私のためにうまく動作します。 – svick

+0

コンパイラがその行にヒットするとすぐに、値は変更されません。 'Date'として薄暗いthisDate ' Integer'として薄暗いthisMonth 'thisDate = Date.Today' 'thisMonth =月(thisDate)' ' thisMonth.ToString( "00")' = "2" 私のための代わり"02"。 – Brady

関連する問題