将十进制转换为字符串到十进制

时间:2011-04-24 18:25:37

标签: objective-c cocoa string

我从另一篇文章中复制了这段代码。我尝试了这个例子,但是,我得到了一个EXEC_BAD_ACCESS。从我读过的,当尝试使用已经解除分配的对象时会发生此错误,但我只是看不到我在做什么:

电话 ...

float weighted_average = num_of_passes / total_of_all_passes;
NSString *newNumber = [[NSString alloc] init];
newNumber = [self formattedStringWithDecimal:weightedAverage]; //weighted average (float) = 15.875145

...

功能

- (NSString *)formattedStringWithDecimal:(NSDecimalNumber *)decimalNumber
{
    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
    [formatter setMaximumFractionDigits:2]; //two deimal spaces
    [formatter setRoundingMode: NSNumberFormatterRoundHalfUp]; //round up


   NSString *result =[NSString stringWithString:[formatter stringFromNumber:decimalNumber]];
    [formatter release];
    return result;
}

2 个答案:

答案 0 :(得分:2)

调用这样的方法:

newNumber = [self formattedStringWithDecimal:[NSDecimalNumber numberWithFloat:15.434]];

您已尝试传递基元,但该方法需要一个对象:NSDecimalNumber。您必须使用静态便捷方法numberWithFloat来创建该类型的对象。

顺便说一下,我有这种感觉

newNumber = [NSString stringWithFormat@"%.2f", 15.434]; 

可以用更少的代码行实现相同的结果。请注意,这不会对您的号码进行舍入。

答案 1 :(得分:1)

您正在返回一个自动释放的对象。使用它的功能是否保留它?如果没有,它可以被释放,然后(稍后运行循环)它试图被(重新)使用。同意让有能力的僵尸发现这种事情。