“stringWithFormat:”的意外结果

时间:2011-10-01 05:43:40

标签: iphone objective-c ios nsstring

以下Objective C代码的预期结果是什么?

int intValue = 1;
NSString *string = [NSString stringWithFormat:@"%+02d", intValue];

我认为字符串的值是“+01”,结果是“+1”。格式字符串“+01”中的某些“0”被忽略。将代码更改为:

int intValue = 1;
NSString *string = [NSString stringWithFormat:@"%02d", intValue];

string的值现在为“01”。它确实产生前导“0”。但是,如果intValue为负数,则如:

int intValue = -1;
NSString *string = [NSString stringWithFormat:@"%02d", intValue];

字符串的值变为“-1”,而不是“-01”。

我错过了什么吗?或者这是一个已知的问题?推荐的解决方法是什么? 提前谢谢。

2 个答案:

答案 0 :(得分:8)

@Mark Byers 在评论中是正确的。指定'0'使用'0'填充有效数字'+/-'。而不是'0'使用点'.'使用'0' 填充有效数字而不管符号

[... stringWithFormat:@"%+.2d", 1]; // Result is @"+01"
[... stringWithFormat:@"%.2d", -1]; // Result is @"-01"

答案 1 :(得分:-1)

NSString *string = [NSString stringWithFormat:@"+0%d", intValue];
NSString *string = [NSString stringWithFormat:@"-0%d", intValue];