objective-c - 将十进制转换为字符串再转换为十进制

标签 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;
}

最佳答案

像这样调用方法:

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

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

顺便说一句,我有这样的感觉

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

可以用更少的代码行实现相同的结果。请注意,这不会将您的数字四舍五入。

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

相关文章:

c - 总线错误排查

objective-c - NSURLSessionDownloadTask 委托(delegate)未触发

objective-c - 为什么垃圾收集不适用于线程?

python - 如何使用 python 在字符串中查找和计算表情符号?

objective-c - 在 Mac 的守护进程/根进程中获取当前用户语言和区域的最佳方法是什么?

objective-c - 为 NSComboBox 项目设置工具提示

Java字符串实习,保证什么?

ios - 计算某一层上某个类的 CCNodes 的数量

ios - 从 NSString 中删除所有非英文字符

iphone - 使用 Storyboard 在 UISplitViewController 中的 Master 和 Detail 之间传递值