У меня есть UITextField на моем приложении, которое получает только числовой ввод от пользователя. Этот числовой ввод представляет собой валюту и имеет значение по умолчанию 0,00.Формат UITextField для валюты
Я хотел бы создать что-то вроде маски для форматирования UITextField, поскольку пользователь вводит числа. Например:
9 становится $ 0,09 99 становится $ 0.99 999 становится $ 999,99
ниже код отлично работает, но, как я использую целое и поплавок значения приложения в конечном итоге будет отображаться неправильно значения оцениваются в определенной точке. Например:
999999999 100000000 становится
Это происходит потому, что Flot и целое число, не являются достаточно точными и NSDEcimalNumber должны быть использованы. Дело в том, что я не могу понять, как заменить мои целые числа и значения float на NSDecimalNumber.
Может кто-нибудь может дать мне руку, чтобы решить эту проблему? Я потратил некоторое время на поиск в Интернете решения, но не нашел, что соответствует моим потребностям и множеству людей с той же проблемой.
Heres код:
-(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;
}
Вы имеете большую проблему. Вы считаете, что валюта вводится в 100-х процентах от стоимости валюты, такой как центы. Люди в Японии не будут счастливы, так как японская йена - это всего лишь целая иена, например. Вы должны допросить форматирование чисел после установки его в стиле валюты и посмотреть, сколько десятичных знаков оно настроено для. – rmaddy
Вы правы, rmaddy. Обратный журнал продолжает расти = D – Carlos
Лично я считаю, что лучше просто позволить пользователю вводить необработанное число без обработки «по мере продвижения». Не форматируйте необработанное число, пока пользователь не покинет текстовое поле. Как пользователь, я бы предпочел ввести десятичный разделитель, когда на самом деле хочу десятичное число. Если я наберу «9», то я имею в виду девять долларов, а не девять центов. Если я хочу девять центов, тогда я хочу напечатать '.09'. Пусть формат почтовой обработки равен '$ 0.09' или что-то еще после того, как я наберу. Не заставляйте меня вводить «900», чтобы получить девять долларов. Но это всего лишь одно мнение. – rmaddy