NSNumberFormatter只允许4位数

时间:2012-01-14 02:39:41

标签: objective-c ios uitextfield nsnumberformatter

请告诉我为什么我的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

2 个答案:

答案 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的第一行或第二行,它将起作用。