请告诉我为什么我的NSNumberFormatter只让我使用4位数字(即2,222英镑)而不是无限数字?
- (BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSString *input = [textField.text stringByAppendingString:string];
[textField setText:[self numberFormattedString:input]];
return NO;
}
- (NSString *) numberFormattedString:(NSString *)str {
str = [str stringByReplacingOccurrencesOfString:@"£" withString:@""];
NSNumberFormatter *formatter = [[[NSNumberFormatter alloc] init] autorelease];
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en-UK"];
[formatter setLocale:locale];
[locale release];
[formatter setMaximumFractionDigits:3];
[formatter setMinimumFractionDigits:0];
return [formatter stringFromNumber:[NSNumber numberWithFloat:[str floatValue]]];
}
编辑 -
当我键入第五个数字时,UITextField中已有4位数字,textField的文本将重置为单独输入的第五个数字。
E.G
我在UITextField中输入1000,然后输入另一个数字5.由于5是第五位,UITextField的文本仅重置为第五位。 UITextField现在显示“5”。
TIA。
XcodeDev
答案 0 :(得分:1)
可能发生的事情是,当用户输入时,格式化程序会在千位标记处插入逗号。当您使用井号进行重新格式化时,您不会将其剥离,因此在某些时候格式化函数将被赋予类似“1,000”的字符串。
当您尝试获取floatValue以将其转换回NSNumber以进行重新格式化时,floatValue返回1,因为它无法解析逗号。
解决方案:将此额外行添加到格式化功能中:
str = [str stringByReplacingOccurrencesOfString:@"," withString:@""];
答案 1 :(得分:1)
问题是逗号正在破坏[NSString floatValue]。当你输入第五个数字时,str最终看起来像 1,0005 ,floatValue转换为值1,因为它不知道如何处理逗号和/或事实上,它之后的数字太多了。添加此代码
str = [str stringByReplacingOccurrencesOfString:@"," withString:@""];
作为numberFormattedString的第一行或第二行,它将起作用。