6

NSString stringWithFormat で何かをするのに問題があります...

問題は次のとおりです。

まず、弦が2本あります。これはお金の量です。

問題は、これら2つで1つの文字列を作成したいということです。

例:

strF = [NSString stringWithFormat:@"First: %@   Second: %@", value1, value2];

First と Second の間に正しいパディングを作成できるかどうかを知りたい..最初の文字列が常に同じ長さではないと仮定すると..

私はこれを作りたい:

First: 10,000.00         Second: 788.00
First: 10.00             Second: 788.00
First: 0.00              Second: 788.00
First: 100.00            Second: 788.00
First: 5.00              Second: 788.00
4

2 に答える 2

6

NSNumberFormatterを使用した、より良い方法を次に示します。

まず、次のようにフォーマッタを作成して構成します。

NSNumberFormatter * formatter = [[ NSNumberFormatter alloc ] init ] ;
[ formatter setFormatWidth:20 ] ;
[ formatter setPaddingCharacter:@" " ] ;
[ formatter setFormatterBehavior:NSNumberFormatterBehavior10_4 ] ;
[ formatter setNumberStyle:NSNumberFormatterDecimalStyle ] ;
[ formatter setMinimumFractionDigits:2 ] ;
[ formatter setMaximumFractionDigits:2 ] ;

フォーマッタを作成すると、コードは次のようになります。

strF = [ NSString stringWithFormat:@"First: %@ Second: %@", [ formatter stringFromNumber:value1 ], [ formatter stringFromNumber:value2 ] ] ;

(千の)区切り記号(現在のロケールで)などを取得します。

私はクラスメソッド(+numberFormatterまたはdispatch_onceブロックのようなもの)でフォーマッタを作成しますカテゴリを介してNSNumberFormatterに追加して、次のようなものを持つこともできます+[ NSNumberFormatter mySharedFormatter ]


フィールド幅指定子を使用できます。これは次のことを行います。

NSString * value1String = ... from NSNumberFormatter to get commas inserted ;
[ NSString stringWithFormat:@"First: %20s Second: %0.2f", [ value1String UTF8String ], value2 ]

「20」は列の幅です。(希望の幅に置き換えます)。右揃えなどの他のオプションがあります。もっとやっman printfてください。

コンマを追加したい場合は、 NSNumberFormatter でそれができるはずです。

(実際には、おそらく小数も並べたいと思うでしょう?試してみることができます% 20.2f)

于 2013-06-06T16:51:02.510 に答える
2

value1まあ、少なくとも最大長を設定する必要があり、その後、次のようなことができます

int maxLength = MAX(15, value1.length); // Prevent cropping anyway
NSString* formattedValue1 = [value1 stringByPaddingToLength:maxLength withString:@" " startingAtIndex:0]
strF = [NSString stringWithFormat:@"First: %@ Second: %@", formattedValue1, value2];
于 2013-06-06T17:01:15.547 に答える