2

请你告诉我为什么我的 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 的文本被重置回单独键入的第五个数字。

例如

我在 UITextField 中输入 1000,然后再输入一个数字 5。由于 5 是第五个数字,因此 UITextField 的文本仅重置为第五个数字。UITextField 现在显示“5”。

TIA。

XcodeDev

4

2 回答 2

1

可能发生的情况是,当用户键入时,格式化程序会在千位标记处插入逗号。当您像使用井号一样进行重新格式化时,您不会将它们剥离,因此在某些时候格式化函数会被赋予一个像“1,000”这样的字符串。

当您尝试获取它的 floatValue 以将其转换回 NSNumber 以重新格式化时,floatValue 返回 1,因为它无法解析逗号。

解决方案:将此额外的行添加到您的格式化函数中:

str = [str stringByReplacingOccurrencesOfString:@"," withString:@""];
于 2012-01-14T03:27:15.827 回答
1

问题是逗号破坏了 [NSString floatValue]。当您输入第五位数字时, str 最终看起来像1,0005, floatValue 转换为 1 的值,因为它不知道如何处理逗号和/或数字太多的事实在它之后。添加此代码

str = [str stringByReplacingOccurrencesOfString:@"," withString:@""];

作为 numberFormattedString 的第一行或第二行,它将起作用。

于 2012-01-14T03:31:08.990 回答