5

NSStringより長くに確実に変換できませんNSNumberMPMediaEntityPropertyPersistentID具体的には、文字列をに変換しています。機能するNSNumber 場合もありますが、通常は機能しません。

変換コード:

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

文字列から数値への変換が成功した例を次に示します。

String: 3813955856659208324
Number: 3813955856659208324

そして、失敗した変換は次のとおりです。

String: 12790162104953153719 
Number:1.279016210495315e+19

間近だけど最後どうなるの?大きすぎますか?

4

2 に答える 2

8

どうやら NSNumberFormatter で処理できる最大の整数は long long で、9223372036854775807 です。それを超えると精度が失われ、入力したとおりに出力されません。

代わりに、NSNumber の具体的なサブクラスである NSDecimalNumber を使用してください。また、文字列自体を解析することもできます:

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

NSDecimalNumber は、精度が失われる前に最大 38 桁の 10 進数を処理できます。

于 2013-09-01T03:27:36.243 に答える
3

これはあなたがそれを行う方法です:

unsigned long long number = [[jsonArray objectForKey:@"next"] longLongValue];
    NSNumber * numberValue = [NSNumber numberWithUnsignedLongLong:number];
于 2013-09-01T03:03:25.787 に答える