【问题标题】:How to convert NSNumber to NSString如何将 NSNumber 转换为 NSString
【发布时间】:2011-04-27 13:34:25
【问题描述】:

所以我有一个带有NSNumbers 和NSStrings 的NSArray“myArray”。我需要它们在另一个UIView,所以我是这样的:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

DetailViewController *details = [[DetailViewController alloc] initWithNibName:@"DetailView" bundle:nil];
details.subjectText = [[myArray objectAtIndex:indexPath.row] objectForKey:@"subject"];

subjectText 有效。 但是我怎样才能得到NSNumbers 呢? (我实际上需要它们作为字符串......) 我会将NSString 转换为NSNumber,如下所示: NSString *blah = [NSNumber intValue]。但是我不知道如何在上面的代码中设置它...

【问题讨论】:

  • objectForKey 的使用来看,您的数组似乎实际上包含字典。因此,您需要在尝试转换之前从中提取适当的值。请注意,大多数 Cocoa 对象类型,包括 NSNumber,都可以通过调用 description 方法(或在格式字符串中使用 %@)转换为字符串。
  • 哇.. 谢谢walkytalky!你能指点我一个文档或给出一个示例代码来理解它吗? =)

标签: objective-c nsstring nsarray nsnumber


【解决方案1】:

试试:

NSString *myString = [NSNumber stringValue];

【讨论】:

  • 但是你应该取数组内部的 NSNumber 然后调用 StringValue 方法,比如 NSString *myString= [[myArray objectAtIndex:i] stringValue];但您必须确保在该索引处有一个 NSNumber
  • 我更喜欢 descriptionWithLocale:[NSLocale currentLocale] 因为它适用于整数和浮点数。
  • @JonLOo 将其用于特定数字时,十进制值会丢失精确值。例如:NSNumber *num = [NSNumber numberWithDouble:48.3]; NSString *strNumber = num.stringValue;结果为 48.299999;如果它的数量必须在现实世界中处理并与大数字相乘,这将变得至关重要。!!有什么想法吗?
  • 嗨@Vish,我没有尝试过这个解决方案,所以我不确定它是否有效,尝试使用%f 格式化它,如下所示:[NSString stringWithFormat:@"%f", yourDouble];
  • "No known class method for selector 'stringValue'"
【解决方案2】:

你可以这样做:

NSNumber *myNumber = @15;
NSString *myNumberInString = [myNumber stringValue];

【讨论】:

    【解决方案3】:
    //An example of implementation :
    // we set the score of one player to a value
    [Game getCurrent].scorePlayer1 = [NSNumber numberWithInteger:1];
    // We copy the value in a NSNumber
    NSNumber *aNumber = [Game getCurrent].scorePlayer1;
    // Conversion of the NSNumber aNumber to a String with stringValue
    NSString *StringScorePlayer1 = [aNumber stringValue];
    

    【讨论】:

      【解决方案4】:

      或试试NSString *string = [NSString stringWithFormat:@"%d", [NSNumber intValue], nil];

      【讨论】:

      • 这会进行两次转换。一种将 NSNumber 转换为 intValue,另一种将生成的 intValue 强制转换为 NSString。使用它对某些人来说可能很小,但删除它是节省小计算周期的好方法......可以加起来。
      • 这假定存储的数字是整数。如果您不知道存储的号码类型怎么办?
      【解决方案5】:

      有趣的是,如果 NSNumber 成为字符串的一部分,它会自动转换为字符串。我认为它没有记录在案。 试试这些:

      NSLog(@"My integer NSNumber:%@",[NSNumber numberWithInt:184]);
      NSLog(@"My float NSNumber:%@",[NSNumber numberWithFloat:12.23f]);
      NSLog(@"My bool(YES) NSNumber:%@",[NSNumber numberWithBool:YES]);
      NSLog(@"My bool(NO) NSNumber:%@",[NSNumber numberWithBool:NO]);
      
      NSString *myStringWithNumbers = [NSString stringWithFormat:@"Int:%@, Float:%@ Bool:%@",[NSNumber numberWithInt:132],[NSNumber numberWithFloat:-4.823f],[NSNumber numberWithBool:YES]];
      NSLog(@"%@",myStringWithNumbers);
      

      它将打印:

      My integer NSNumber:184
      My float NSNumber:12.23
      My bool(YES) NSNumber:1
      My bool(NO) NSNumber:0
      Int:132, Float:-4.823 Bool:1
      

      适用于 Mac 和 iOS

      这个不行:

      NSString *myNSNumber2 = [NSNumber numberWithFloat:-34512.23f];
      

      【讨论】:

      • 记录在案:%@ 格式说明符会将-description 消息发送到相应的接收器对象。您可以通过以下方式使您的最后一行以同样的精神工作:NSString *myNSNumber2 = [[NSNumber numberWithFloat:-34512.23f] description];。据我所知,NSNumberdescriptionstringValue 方法做同样的事情。
      【解决方案6】:

      在 Swift 中你可以这样做

      let number : NSNumber = 95
      let str : String = number.stringValue
      

      【讨论】:

        【解决方案7】:

        在 Swift 3.0 中

        let number:NSNumber = 25
        let strValue = String(describing: number as NSNumber)
        print("As String => \(strValue)")
        

        我们可以得到String中的数值。

        【讨论】:

          猜你喜欢
          • 2010-11-29
          • 2011-09-05
          • 1970-01-01
          • 1970-01-01
          • 2023-04-05
          • 1970-01-01
          • 2011-10-02
          • 1970-01-01
          相关资源
          最近更新 更多