Sformatuj pole UITextField dla waluty

Mam aplikację UITextField na mojej aplikacji, która odbiera tylko dane liczbowe od użytkownika. Ta wartość liczbowa reprezentuje walutę i ma domyślną wartość 0,00.

Chciałbym utworzyć coś w rodzaju maski, aby sformatować UITextField, gdy użytkownik wprowadzi liczby. Na przykład:

9 staje się 0,09 USD 99 staje się 0,99 USD 999 staje się 999,99 USD

Poniższy kod działa świetnie, ale ponieważ używam wartości całkowitych i zmiennoprzecinkowych, aplikacja będzie wyświetlać błędne wartości w określonym punkcie. Na przykład:

999999999 staje się 100000000

Dzieje się tak, ponieważ flot i liczba całkowita nie są wystarczająco precyzyjne i należy użyć NSDEcimalNumber. Chodzi o to, że nie wiem, jak zamienić moje liczby całkowite i zmienne na wartości NSDecimalNumber.

Czy ktoś mógłby mi dać rękę, żeby to rozwiązać? Spędzam trochę czasu, szukając rozwiązania w sieci, ale nie znalazłem tego, co odpowiada moim potrzebom i tonom ludzi z tym samym problemem.

Oto kod:

-(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;
}

questionAnswers(2)

yourAnswerToTheQuestion