如何将NSNumber转换为NSString


132

所以我有一个s和s 的NSArray“ myArray” 。我需要另一个,所以我会这样:NSNumberNSStringUIView

- (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困境呢?(实际上,我需要将它们作为字符串...),我会将a转换NSStringNSNumber如下形式: NSString *blah = [NSNumber intValue]。但是我不知道如何在上面的代码中进行设置...


通过使用判断,您的数组似乎实际上包含字典objectForKey。因此,您需要从中提取适当的值,然后再尝试进行转换。请注意,可以通过调用description方法(或使用%@格式字符串)将大多数可可对象类型(包括NSNumber)转换为字符串。
walkytalky

哇..谢谢walkytalky!您能指出我一个文档还是提供示例代码来理解它?=)
dav3

Answers:


380

尝试:

NSString *myString = [NSNumber stringValue];

3
但是您应该使用数组内部的NSNumber,然后调用StringValue方法,类似于NSString * myString = [[myArray objectAtIndex:i] stringValue]; 但您必须确保在该索引处有一个NSNumber
JonLOo 2010年

我更喜欢descriptionWithLocale:[NSLocale currentLocale],因为它同时适用于int和float。
just.do.it 2015年

@JonLOo将其用于特定数字时,十进制值会丢失精确值。例如:NSNumber * num = [NSNumber numberWithDouble:48.3]; NSString * strNumber = num.stringValue; 结果为48.299999; 如果它的数量必须在现实世界中处理并乘以大数,这就变得至关重要。任何想法?
Vish 2015年

嗨,@ Vish,我还没有尝试过这个解决方案,所以我不确定它是否会起作用,请尝试使用以下格式进行格式化%f[NSString stringWithFormat:@"%f", yourDouble];
JonLOo 2015年

“选择器'stringValue'的未知类方法” <-stringValue不是类函数,因此您不能直接在NSNumber上调用它。rhalgravez的答案正确地做到了。
user1021430

13

您可以执行以下操作:

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

7
//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];

5

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


8
这将进行两次转换。一种将NSNumber转换为intValue,另一种将所得的intValue强制转换为NSString。对某些人来说,使用此功能可能很小,但是删除它是节省较小计算周期的好方法……这可能加起来。
Jann

这假定要存储的数字是整数。如果您不知道所存储号码的类型怎么办?
James Webster 2014年

3

有趣的是,如果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];

2
记录在案:%@格式说明符会将-description消息发送到相应的接收者对象。您可以通过书面形式做出同样的精神你的最后一行的工作:NSString *myNSNumber2 = [[NSNumber numberWithFloat:-34512.23f] description];。据我所知,NSNumberdescriptionstringValue方法执行相同的操作。
Jean-Denis Muys '16

2

在Swift中,您可以这样做

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.