2011-04-24 96 views
1

我從其他帖子複製了該代碼。我試過這個例子,但是,我得到了一個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; 
} 
+0

你能發佈錯誤信息嗎?首先爲您的可執行文件啓用NSZombieEnabled。 – 2011-04-24 18:27:35

+0

而且formatterstringFromNumber是如何定義的?我無法運行代碼。請添加代碼。加權平均是如何初始化的? – 2011-04-24 18:36:24

+0

應該讀取:[formatter stringFromNumber – draion 2011-04-24 18:57:19

回答

2

呼叫這樣的方法:

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

你試圖通過一個原始的,但方法需要一個對象:一個NSDecimalNumber。您必須使用靜態便利方法numberWithFloat來創建該類型的對象。

順便說一下,我有

newNumber = [NSString [email protected]"%.2f", 15.434]; 

可以用較少的代碼行達到同樣的效果的感覺。請注意,這不會讓你的號碼變高。

1

您正在返回一個自動釋放的對象。使用它的功能是否保留它?如果沒有,它可能會被釋放,然後稍後(稍後運行循環)嘗試被重新使用。同意讓殭屍來發現這種事情。

相關問題