Отформатируйте UITextField для валюты

У меня есть UITextField в моей заявке, которая получает только числовые данные от пользователя. Этот числовой ввод представляет валюту и имеет значение по умолчанию 0,00.

Я хотел бы создать что-то вроде маски для форматирования UITextField, когда пользователь вводит числа. Например:

9 становится $ 0,09 99 становится $ 0,99 999 становится $ 999,99

Приведенный ниже код прекрасно работает, но так как я использую целочисленные и плавающие значения, приложение в конечном итоге будет отображать неправильные значения после определенной точки. Например:

999999999 становится 100000000

Это происходит потому, что flot и integer недостаточно точны, и следует использовать NSDEcimalNumber. Дело в том, что я не могу понять, как заменить мои целые числа и значения с плавающей точкой на значения NSDecimalNumber.

Кто-нибудь может мне помочь решить это? Я потратил некоторое время на поиск решения в сети, но не нашел, что оно подходит для моих нужд и множества людей с такой же проблемой.

Вот код:

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if (textField.tag == 1){
    NSString *cleanCentString = [[textField.text componentsSeparatedByCharactersInSet: [[NSCharacterSet decimalDigitCharacterSet] invertedSet]] componentsJoinedByString:@""];
    NSInteger centValue= cleanCentString.integerValue;

    if (string.length > 0)
    {
        centValue = centValue * 10 + string.integerValue;
    }
    else
    {
        centValue = centValue / 10;
    }

    NSNumber *formatedValue;
    formatedValue = [[NSNumber alloc] initWithFloat:(float)centValue / 100.0f];
    NSNumberFormatter *_currencyFormatter = [[NSNumberFormatter alloc] init];
    [_currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
    textField.text = [_currencyFormatter stringFromNumber:formatedValue];
    return NO;
}

if (textField.tag == 2){
    // Nothing for now
}

return YES;
}

Ответы на вопрос(2)

Ваш ответ на вопрос