如何将 NSNumber 转换为 NSString
Posted
技术标签:
【中文标题】如何将 NSNumber 转换为 NSString【英文标题】:How to convert NSNumber to NSString 【发布时间】:2011-04-27 13:34:25 【问题描述】:所以我有一个带有NSNumber
s 和NSString
s 的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 有效。
但是我怎样才能得到NSNumber
s 呢? (我实际上需要它们作为字符串......)
我会将NSString
转换为NSNumber
,如下所示:
NSString *blah = [NSNumber intValue]
。但是我不知道如何在上面的代码中设置它...
【问题讨论】:
从objectForKey
的使用来看,您的数组似乎实际上包含字典。因此,您需要在尝试转换之前从中提取适当的值。请注意,大多数 Cocoa 对象类型,包括 NSNumber,都可以通过调用 description
方法(或在格式字符串中使用 %@
)转换为字符串。
哇.. 谢谢walkytalky!你能指点我一个文档或给出一个示例代码来理解它吗? =)
【参考方案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];
。据我所知,NSNumber
的 description
和 stringValue
方法做同样的事情。【参考方案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中的数值。
【讨论】:
以上是关于如何将 NSNumber 转换为 NSString的主要内容,如果未能解决你的问题,请参考以下文章
将 NSString 转换为 NSNumber 会导致数字过多和奇怪的舍入
将 NSString 转换为特定于语言环境的 NSNumber
在 CoreData 实体中将属性从 NSNumber 转换为 NSString - LightWeightMigration