使用Objective C Double进行数学运算

Pet*_*ann 1 math double core-graphics objective-c

我在Objective C中得到了这个循环,需要一些指导才能让它解决.我试图根据数组,数组中存储为字符串的数字来计算四个条的高度.largestTotal是一个字符串,包含数组中四个对象中最大的一个.我以前将数组中的每个元素格式化为货币.

for (int j=0; j<[array count]; j++) {    
    NSLog(@"%@ %@ %@",[NSString stringWithFormat:@"%d", j], [array objectAtIndex:j], biggestTotal);
    double barHeight = (([[array objectAtIndex:j] doubleValue])*400.0/([biggestTotal doubleValue]));
    NSLog(@"%@",barHeight);
    CGRect currentRect = CGRectMake((150.0+(j*125.0)), (425.0-barHeight), 100.0, barHeight); // (x, y, width, height)
    CGContextAddRect(context, currentRect);
    CGContextDrawPath(context, kCGPathFillStroke);
}
Run Code Online (Sandbox Code Playgroud)

使用上面的NSLog语句,我获得如下控制台输出:

0 $106,758.20 $106,758.20
(null)
1 $14,536.69 $106,758.20
(null)
2 $32,111.96 $106,758.20
(null)
3 $100,020.00 $106,758.20
(null)
Run Code Online (Sandbox Code Playgroud)

还有,遗憾的是我没有酒吧.我在这里错过了什么?为什么barHeight是(null)?非常感激任何的帮助...

Jos*_*ell 6

barHeightNULL*因为@"$106,758.20"没有效果doubleValue.摆脱$,**它应该工作.

此外,如果您使用货币进行数学运算,请不要使用double.使用NSDecimalNumber


*实际上0.0因为它不能按照文档转换,但是,正如其他人所指出的那样,你试图用错误的格式说明符来记录它:%@对象是对象,而不是double.因为0x0nil0x0 == 0.0:),如果你尝试NSLog(@"%@", 0.0);,你得到"(null)"输出.此外,如果您确实获得了有效的回报doubleValue,您尝试使用%@很可能会导致崩溃**,因为您将尝试触摸您不应该的内存.

**感谢Caleb(见评论)指出这一点.