Преобразование десятичной дроби в строковую в десятичную - PullRequest
1 голос
/ 24 апреля 2011

Я скопировал этот код из другого поста. Я попробовал пример, однако я получаю 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 ]

2 голосов
/ 24 апреля 2011

Вызовите метод следующим образом:

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

Вы пытались передать примитив, но метод ожидает объект: NSDecimalNumber.Вы должны использовать статический вспомогательный метод numberWithFloat для создания объекта этого типа.

И, кстати, у меня есть ощущение, что

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

может достичь того же результата сменьше строк кода.Обратите внимание, что это не будет округлять ваш номер.

1 голос
/ 24 апреля 2011

Вы возвращаете автоматически выпущенный объект. Сохраняет ли функция, которая его использует? Если нет, он может быть освобожден, а затем (позднее запустить цикл) его попытаться (повторно) использовать. Договорились о том, чтобы зомби могли обнаружить подобные вещи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...