0

我正在阅读其他人的代码,他们正在使用 %@-1 来格式化整数。我在谷歌上找不到任何东西,因为它忽略了符号。还有其他人在字符串格式化方面比我更有经验吗?

[NSString stringWithFormat:@"%@-1", subnumber]

谢谢!

4

3 回答 3

6

根据规范

每个转换规范都由“%”字符或字符序列“%n$”引入,之后依次出现以下内容:

  • 零个或多个标志(以任何顺序),它们修改转换规范的含义。

  • 可选的最小字段宽度。如果转换后的值的字节数小于字段宽度,则默认在左侧填充空格;如果左调整标志('-')(如下所述)被赋予字段宽度,则应在右侧填充。字段宽度采用如下所述的星号 ('*') 或十进制整数的形式。

  • 一个可选精度,给出 d、i、o、u、x 和 X 转换说明符出现的最小位数;在 a、A、e、E、f 和 F 转换说明符的基数字符之后出现的位数;g 和 G 转换说明符的最大有效位数;或从 s [XSI] [Option Start] 和 S [Option End] 转换说明符中的字符串打印的最大字节数。精度采用句点 ('.') 后跟星号 ('*') 的形式,如下所述,或可选的十进制数字字符串,其中空数字字符串被视为零。如果精度与任何其他转换说明符一起出现,则行为未定义。

  • 一个可选的长度修饰符,它指定参数的大小。

  • 一个转换说明符字符,指示要应用的转换类型。

我们使用的是第一种类型的转换,因为这里没有美元符号。请注意上面列表顶部的单词顺序。the@是一个转换说明符字符(如这里提到的),它表示我们应该访问作为 an 传入的值NSObject并读取它的description属性。由于我们已经到达最后一个要点,格式代码实际上在@符号之后结束,正如@Kevin Ballard 指出的那样,它-1被解析为文字文本。

于 2011-11-03T05:35:50.863 回答
5

这只是要打印“NUM-1”(其中 NUM 是数字)。举个例子,如果数字是 5,那将打印“5-1”。

使用格式字符串时,格式标记的任何修饰符都必须出现在格式类型说明符之前。在这种情况下,这意味着%@令牌的任何修饰符都必须出现在 the%和 the之间@(尽管我不确定是否实际上有任何修饰符可以%@接受)。

于 2011-11-03T05:26:21.450 回答
3

subnumber 可能是类的对象,如 NSNumber。就像我们使用 %d 表示 int,使用 %f 表示浮点数一样,%@ 是引用的占位符。在这种情况下

NSNumber *subnumber = [NSNumber numberWithInt:5];
NSLog([NSString stringWithFormat:@"%@-1", subnumber]);

将打印“5-1”

于 2011-11-03T05:35:27.743 回答