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