从数字到字符串的错误转换

时间:2011-04-18 19:56:38

标签: iphone objective-c

如何将数字转换为字符串。

这是我的代码:

NSDictionary *myDict = [NSDictionary dictionaryWithObjectsAndKeys:@"1100", @"myKey",nil];

NSString *myData = [NSString stringWithFormat:@"%d", [myDict valueForKey:@"myKey"]];

myData中的输出不是1100,而是一些随机数。这里有什么问题。

3 个答案:

答案 0 :(得分:4)

您已存储的数字是字符串形式(请注意引号:@“...”)。

你可能想要的是这样的:

NSDictionary *myDict = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInteger:1100], @"myKey",nil];

NSString *myData = [NSString stringWithFormat:@"%d", [[myDict objectForKey:@"myKey"] integerValue]];

让我们一步一步地通过该代码:

  1. 我们通过[NSNumber numberWithInteger:1100]
  2. 创建一个持有1100的NSNumber对象
  3. 我们创建一个NSDictionary对象,其中所述数字对象为键@"myKey"
  4. 的值
  5. 我们从@"myKey"通过myDict请求密钥[myDict objectForKey:@"myKey"]的值,这将返回我们之前传递给它的NSNumber实例。
  6. 然后我们通过[… integerValue]
  7. 请求接收到的NSNumber实例的整数值(NSInteger,这是int / long的抽象)
  8. 我们将NSInteger值传递给[NSString stringWithFormat:@"%d", …]
  9. 或者你可以跳过第4步并将@“%d”更改为@“%@”,这将打印相同的内容。如果是至少简单的整数值。对于浮点值,您不希望通过@“%@”直接打印NSNumber,因为您无法控制小数精度的显示。

    请注意,我们使用的是objectForKey:,而不是valueForKey:,原因如下:https://stackoverflow.com/search?q=valueForKey%20objectForKey


    您可以通过将代码更改为此来创建相同的字符串:

    NSDictionary *myDict = [NSDictionary dictionaryWithObjectsAndKeys:@"1100", @"myKey",nil];
    
    NSString *myData = [NSString stringWithFormat:@"%@", [myDict objectForKey:@"myKey"]];
    

    原因是,为什么不想这样做:将数字**(或几乎任何其他非文本)值存储为字符串**(通常)是不好的做法**

答案 1 :(得分:2)

当您在字典中插入%d@"1100"时,

NSString是整数值的说明符。

使用%@更改说明符并且它将起作用..或者如果您想要放置数字本身,则必须在字典中用Obj-C对象(如NSNumber)包装它

答案 2 :(得分:0)

其他两个答案都是正确的,但是......

您似乎想要:

NSDictionary *myDict = [NSDictionary dictionaryWithObjectsAndKeys:@"1100", @"myKey",nil];
NSString *myData = [myDict valueForKey:@"myKey"];

没有必要进行+stringWithFormat:舞蹈,因为您已经将值存储为字符串(@"..."表示它是一个字符串)。