2011-08-15 10 views
21

私はintを持っています。例えば45と言います。この整数からNSStringを4つのゼロで埋めたいと思っています。結果は@"0045"となります。同様に、intが9の場合、私は取得したい:@"0009"NSStringの数値を埋め込む

私は桁数を数えることができると知っています。それから詰め込みたい零点の数から減算し、その数を文字列の前に追加しますが、よりエレガントな方法がありますか?ありがとう。

答えて

34

これを試してみてください:

NSLog(@"%04d", 45); 
NSLog(@"%04d", 9); 

を、それが動作する場合、あなたは任意の番号を持っているしたい場合は、あなたが持っていると思います

、あなたは

NSString *paddedNumber = [NSString stringWithFormat:@"%04d", 45]; 
NSString *otherPaddedNumber = [NSString stringWithFormat:@"%04d", 9]; 

アップデートで追加された数字を得ることができますフォーマットのフォーマットを作成する:

// create "%04d" format string 
NSString *paddingFormat = [NSString stringWithFormat:@"%%0%dd", 4]; 

// use it for padding numbers 
NSString *paddedNumber = [NSString stringWithFormat:paddingFormat, 45]; 
NSString *otherPaddedNumber = [NSString stringWithFormat:paddingFormat, 9]; 

アップデート2

方法のNSLogとパッド数を適切に上Ibmuraiさんのコメント@を参照してください。

+0

迅速な応答をありがとう。これは完全に動作しますが、どのように任意の数値を指定できますか?私は試してみました:NSLog(@ "%0%id"、4、45);しかし、これは動作しません。再度、感謝します。 – RungaDeMungoezz

+0

私は自分の答えを更新しました – Eimantas

+0

ありがとう!あなたは私の命を救いました。 – RungaDeMungoezz

20

私はすでに受け入れられている回答でこの質問に答えることはできませんが、回答は(更新中)ではなく、が最適です。

あなたはIEEE printfがこれをサポートしているとして、あなたが、あなたのフォーマットの形式を作成する必要はありません任意の番号を持っているしたい場合。代わりに行います。

NSString *paddedNumber = [NSString stringWithFormat:@"%0*d", 4, 45]; 
NSString *otherPaddedNumber = [NSString stringWithFormat:@"%0*d", 4, 9]; 

他のソリューションが動作しますが、それはあまり効果的でエレガントです。 IEEEのprintf仕様から

フィールド幅、または精度、またはその両方は、アスタリスク( '*')で示されてもよいです。この場合、int型の引数はフィールドの幅または精度を提供します。 Int拡張として

0

スウィフトバージョン(1つのかもしれないがたいが、その方法のためのより良い名前を思い付く):

extension Int 
{ 
    func zeroPaddedStringValueForFieldWidth(fieldWidth: Int) -> String 
    { 
     return String(format: "%0*d", fieldWidth, self) 
    } 
} 

例:

print(45.zeroPaddedStringValueForFieldWidth(4)) // prints "0045" 
print(9.zeroPaddedStringValueForFieldWidth(4)) // prints "0009" 
関連する問題