我在使用NSString stringWithFormat ...
时遇到问题问题如下:
首先,我有2个字符串。哪些是货币数量。
问题是,我想用这两个创建一个字符串。
例如:
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
答案 0 :(得分: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 ]
<之类的内容/ p>
您可以使用字段宽度说明符。它这样做:
NSString * value1String = ... from NSNumberFormatter to get commas inserted ;
[ NSString stringWithFormat:@"First: %20s Second: %0.2f", [ value1String UTF8String ], value2 ]
其中“20”是列的宽度。 (替换所需的宽度)。还有其他选项,例如右对齐等。请man printf
了解更多信息。
如果你想添加逗号,NSNumberFormatter应该可以这样做。
(实际上,你可能希望你的小数也排成一行,对吧?你可以试试% 20.2f
)
答案 1 :(得分: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];