我在一个类中编写一个方法,该类返回grades
的所有元素的总和,NSDecimalNumbers的(私有实例)NSMutableArray
grades = [[NSMutableArray alloc] init];
我收到的字符串格式为"(长度) - (值)(值)..."
(例如:"3 - 90.5 85.2 89.6"
)
这就是我填充数组的方法
-(void) setGrades: (NSString *) list{
NSArray *arr = [list componentsSeparatedByString:@" "];
int i = 2; //start from 2 to ignore length and '-'
for (; i<[arr count]; i++)
{
NSString *temp = [arr objectAtIndex:i];
[grades addObject: [NSDecimalNumber decimalNumberWithString: temp]];
}
}
总和方法
-(double) getSum{
double sum = [[grades valueForKeyPath:@"@sum.doubleValue"]doubleValue];
return sum;
}
返回完全不正确的内容。例如,使用上面的示例数据,它返回0
。或者,如果我删除最后一个值(因此它将是"2 - 90.5 85.2"
),它将返回-1717986918
。我填充数组或其他方式的错误是什么?我该如何解决?
答案 0 :(得分:1)
在你的这种方法中
-(void) setGrades: (NSString *) list{
NSArray *arr = [list componentsSeparatedByString:@" "];
int i = 2; //start from 2 to ignore length and '-'
for (; i<[arr count]; i++)
{
NSString *temp = [arr objectAtIndex:i];
[grades addObject: [NSDecimalNumber decimalNumberWithString: temp]];
}
}
不要将其转换为NSDecimalNumber并将其以字符串格式添加到数组中。并确保你已经为成绩数组分配了内存。
grades = [[NSMutableArray alloc]init];
然后在这个方法中
-(double) getSum{
double sum = [[grades valueForKeyPath:@"@sum.doubleValue"]doubleValue];
return sum;
}
做这样的事情:
-(double) getSum{
double sum = 0;
for(int i = 0; i< grades.count; i++){
sum += [[NSString stringWithFormat:@"%@",[grades objectAtIndex:i]]doubleValue];
}
return sum;
}
希望这会对你有所帮助。
答案 1 :(得分:0)
最好选择一种类型并坚持下去。
NSDecimal:
[grades addObject:[NSDecimalNumber decimalNumberWithString: temp]];
NSDecimalNumber *sum = [grades valueForKeyPath:@"@sum.self"];
双:
[grades addObject:[NSNumber numberWithDouble:[temp doubleValue]]];
double sum = [[grades valueForKeyPath:@"@sum.self"] doubleValue];
的NSString:
[grades addObject:temp];
NSString *sum = [grades valueForKeyPath:@"@sum.self"];