我正在尝试使用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
如何修复格式以执行此类操作?
答案 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视图),则可能会将多个空格的任何实例减少到一个空间。