NSString stringWithFormat问题

时间:2010-04-23 18:10:19

标签: iphone objective-c cocoa cocoa-touch

我正在尝试使用NSString构建一个小表。我似乎无法正确格式化字符串。

这就是我所拥有的

[NSString stringWithFormat:@"%8@: %.6f",e,v]

其中e是来自其他地方的NSString,而v是浮点数。

我想要的是这样的输出:

Grapes:       20.3
Pomegranates:  2.5
Oranges:      15.1

我得到的是

Grapes:20.3
Pomegranates:2.5
Oranges:15.1

如何修复格式以执行此类操作?

4 个答案:

答案 0 :(得分:6)

你可以尝试使用 - stringByPaddingToLength:withString:startingAtIndex:

答案 1 :(得分:3)

NSDictionary* fruits = [NSDictionary dictionaryWithObjectsAndKeys:
                        [NSNumber numberWithFloat:20.3], @"Grapes",
                        [NSNumber numberWithFloat:2.5], @"Pomegranates",
                        [NSNumber numberWithFloat:15.1], @"Oranges",
                        nil];
NSUInteger longestNameLength = 0;
for (NSString* key in [fruits allKeys])
{
    NSUInteger keyLength = [key length];
    if (keyLength > longestNameLength)
    {
        longestNameLength = keyLength;
    }
}
for (NSString* key in [fruits allKeys])
{
    NSUInteger keyLength = [key length];
    NSNumber* object = [fruits objectForKey:key];
    NSUInteger padding = longestNameLength - keyLength + 1;
    NSLog(@"%@", [NSString stringWithFormat:@"%@:%*s%5.2f", key, padding, " ", [object floatValue]]);
}

输出:

Oranges:      15.10
Pomegranates:  2.50
Grapes:       20.30

答案 2 :(得分:1)

NSNumberFormatter类是要走的路!

示例:

NSNumberFormatter *numFormatter = [[NSNumberFormatter alloc] init];
[numFormatter setPaddingCharacter:@"0"];
[numFormatter setFormatWidth:2];
NSString *paddedString = [numFormatter stringFromNumber:[NSNumber numberWithInteger:integer]];
[numFormatter release];

答案 3 :(得分:0)

我想你想要像

这样的东西
[NSString stringWithFormat:@"%-9@ %6.1f",[e stringByAppendingString:@":"],v]

因为你想要在float前面填充以使其适合列,但是如果NSString长于8,它将打破列。

%-8f左对齐9个字符宽的列中的字符串(9宽,因为:预先附加到字符串,这样做:是在字符串的末尾,而不是在填充空格之后); %6.1f右移对齐6-char字段中的浮点数,小数点后1位。

编辑:另外,如果您将输出视为HTML(例如通过某种Web视图),则可能会将多个空格的任何实例减少到一个空间。