gpt4 book ai didi

objective-c - NSNumberFormatter 不允许十进制输入

转载 作者:行者123 更新时间:2023-11-29 13:41:53 25 4
gpt4 key购买 nike

如果我输入小数点“.”在我的 UITextField 中,调用的数字格式化程序无法识别小数点并继续,就好像没有输入小数点一样。即如果我输入 200.9,小数点将不会显示在文本字段中,文本字段的文本将是 2009。

我想将小数点后的位数限制为 2,因为我相信我在下面这样做。你能告诉我我正在做什么导致这个吗?

- (BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
BOOL isDeleting = [textField.text substringWithRange:range].length > string.length;
int index = [textFields indexOfObject:textField];
NSString *input;

if (isDeleting == NO)
input = [textField.text stringByAppendingString:string];
else {
NSMutableString *str = [textField.text mutableCopy];
[str deleteCharactersInRange:range];
input = [[str copy] autorelease];
[str release];
}

if ([input isEqualToString:@"£"] || ([input isEqualToString:@""] && index != 1)) {
[textField setText:@"£"];
}
else {
if (index != 1)
[textField setText:[self numberFormattedString:input]];
else
[textField setText:input];
}

return NO;
}
- (NSString *) numberFormattedString:(NSString *)str {
str = [str stringByReplacingOccurrencesOfString:@"£" withString:@""];
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 setAllowsFloats:YES];
[formatter setMaximumFractionDigits:3];
[formatter setMinimumFractionDigits:0];
[formatter setDecimalSeparator:@"."];
return [formatter stringFromNumber:[NSNumber numberWithFloat:[str floatValue]]];
}

TIA。

最佳答案

假设您输入数字 100,然后输入小数点。当使用字符串 £100. 调用 numberFormattedString 时,它将去掉 £,而 str 将包含字符串 100. 其中 [str floatValue] 转换为浮点值 100,最后您的数字格式化程序将其吐回为字符串 £100,没有任何小数点。所以基本上 [str floatValue] 正在杀死你的小数点。

一种解决方案是在文本字段委托(delegate)方法中检查何时将小数点作为替换字符串,并在这种情况下跳过调用 numberFormattedString。然后当用户输入下一个数字时,您可以继续调用 numberFormattedString,并且转换应该会正确进行。您只需确保用户只能输入一位小数。

编辑:我刚刚意识到,如果您在小数点后输入 0(例如 100.0),我建议的解决方案仍然无效,但我确信您可以通过一些小的调整来解决这个问题。

关于objective-c - NSNumberFormatter 不允许十进制输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8866872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com