如何将 NSNumber 转换为 NSString

Posted

技术标签:

【中文标题】如何将 NSNumber 转换为 NSString【英文标题】:How to convert NSNumber to 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!你能指点我一个文档或给出一个示例代码来理解它吗? =) 【参考方案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中的数值。

【讨论】:

以上是关于如何将 NSNumber 转换为 NSString的主要内容,如果未能解决你的问题,请参考以下文章

将 NSString 转换为 NSNumber 精度问题

将 NSString 转换为 NSNumber 会导致数字过多和奇怪的舍入

将核心数据中的 NSNumber 转换为 NSString

将 NSString 转换为特定于语言环境的 NSNumber

在 CoreData 实体中将属性从 NSNumber 转换为 NSString - LightWeightMigration

React Native - nsnumber类型的json值'0'无法转换为nsstring