2013-09-01 21 views
5

Tôi không thể chuyển đổi một cách đáng tin cậy dài hơn NSString thành NSNumber. Cụ thể, tôi đang chuyển đổi MPMediaEntityPropertyPersistentID thành chuỗi thành NSNumber Đôi khi nó hoạt động, thường thì không.Chuyển đổi NSString dài thành NSNumber

đang chuyển đổi:

NSString *keke = [jsonArray objectForKey:@"next"]; 
NSNumberFormatter * f = [[NSNumberFormatter alloc] init]; 
[f setNumberStyle:NSNumberFormatterDecimalStyle]; 
NSNumber *persistentIDasNumber = [f numberFromString:keke]; 

Dưới đây là một ví dụ về một chuỗi thành công để chuyển đổi số:

String: 3813955856659208324 
Number: 3813955856659208324 

Và đây là một chuyển đổi không thành công:

String: 12790162104953153719 
Number:1.279016210495315e+19 

Đó là gần nhưng những gì đang xảy ra ở cuối? Nó có quá lớn không?

+0

Nó có phải là NSNumber không? hoặc nó có thể là int hay unsigned int hay float? – CaptJak

+0

Tôi nghĩ rằng nó phải là một 'NSNumber' khi chức năng trình phát đa phương tiện thực hiện điều đó. Tuy nhiên nếu bạn có thể gửi số nguyên chuyển đổi tôi có thể thử những người trong các phương tiện truyền thông máy nghe nhạc. –

+0

cũng để làm int sẽ là 'NSString * string = @" 5 "; int value = [string intValue]; ' – CaptJak

Trả lời

8

Rõ ràng số nguyên lớn nhất có thể được xử lý với NSNumberFormatter là dài lâu, đó là 9223372036854775807. Bất cứ điều gì vượt ra ngoài đó sẽ mất độ chính xác và không đi ra khi bạn đặt nó in.

Thay vào đó hãy sử dụng NSDecimalNumber, một lớp con cụ thể của NSNumber. Và thậm chí nó có thể phân tích cú pháp chính các chuỗi:

NSDecimalNumber *dn=[[NSDecimalNumber alloc]initWithString:@"12790162104953153719"]; 
NSLog(@"dn: %@",dn); 

NSDecimalNumber có thể xử lý tối đa 38 chữ số thập phân trước khi mất độ chính xác.

3

Đây là cách bạn làm điều đó:

unsigned long long number = [[jsonArray objectForKey:@"next"] longLongValue]; 
    NSNumber * numberValue = [NSNumber numberWithUnsignedLongLong:number]; 
+0

Cảm ơn nhưng không khớp, 'string: 15295462469298033064' cho tôi' numberValue: 9223372036854775807' –

+0

Nó hoạt động trong nhiều trường hợp hơn nữa! bất kỳ ý tưởng làm thế nào để mở rộng khả năng vì vậy tôi có thể chắc chắn 100% của những trường hợp mà bài hát có một ID dài hơn như trên? –

+0

điều này xảy ra bởi vì bạn đang đạt đến giới hạn lâu dài ... vì vậy bạn cần loại lớn tiếp theo ... Tôi đang tìm kiếm nó – Jatin