我从另一篇文章中复制了此代码。我尝试了该示例,但是,我得到了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;
}

最佳答案

像这样调用方法:

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


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

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

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


可以用更少的代码行达到相同的结果。请注意,这不会将您的数字取整。

关于objective-c - 将十进制转换为字符串再转换为十进制,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5772364/

10-12 21:42