NSNumber longLongValue错误地返回0

时间:2015-02-12 01:02:53

标签: objective-c cocoa nsnumber floating-point-conversion

我在调试器中看到了NSNumber的值:

  

(lldb)po avg

     

377.57142857142857142857142857142857142

当我问它的intValue时,我得到377.很好。但如果我问它longLongValue我得到0。

是什么给出了?

更新:完整的情况是我有一系列NSNumber对象,而且我的平均值是这样的:

NSMutableArray *myNums = nil; //assume this is full of numbers
NSNumber *avg = [myNums valueForKeyPath:@"@avg.self"];
int64_t result = avg.longLongValue; //this gets 0

我已在调试器中停在此处,我可以p [avg longLongValue]并获得0. p [avg intValue]获得377。

更新2:这是一个可靠的复制品:

NSArray *testArr = @[@(392), @(392), @(339), @(394), @(393), @(394), @(339)];
NSNumber *testAvg = [testArr valueForKeyPath:@"@avg.self"];
int64_t testRes = testAvg.longLongValue;
NSLog(@"Result is %lli", testRes);
int res2 = testAvg.intValue;
NSLog(@"Int result is %i", res2);

结果日志是:

  

结果为0

     

Int结果是377

1 个答案:

答案 0 :(得分:-2)

您的po [testAvg class]给出NSDecimalNumber问题。

这些链接可以解释原因:

Link 1

Link 2

如链接1所示,您应该[[testAvg stringValue] longLongVale]