Что, вероятно, происходит, когда пользователь печатает, форматировщик вставляет запятые в тысячу знаков.Вы не удаляете их, когда выполняете переформатирование, как со знаком фунта, поэтому в какой-то момент функция форматирования получает строку типа «1000».
Когда вы пытаетесь получить floatValueиз этого, чтобы преобразовать его обратно в NSNumber для переформатирования, floatValue возвращает 1, потому что он не может разобрать запятые.
Решение: добавьте эту дополнительную строку к вашей функции форматирования:
str = [str stringByReplacingOccurrencesOfString:@"," withString:@""];