我有几个文本字段,用户在其中输入一个数字,然后我用该数字进行各种计算。由于这些数字可能非常大,我感觉有些用户可能会在输入的值中放入分组分隔符(逗号、空格、小数)。
有没有一种好方法可以检查用户是否在文本字段中放置了分组分隔符,然后删除该分组分隔符,以便我可以将输入的值存储为 NSNumber?
据我所知, NSNumberFormatter 没有为此提供方法,我的所有解决方案似乎都非常低效。想问问大家有没有什么好的方法来解决这个问题。
我有几个文本字段,用户在其中输入一个数字,然后我用该数字进行各种计算。由于这些数字可能非常大,我感觉有些用户可能会在输入的值中放入分组分隔符(逗号、空格、小数)。
有没有一种好方法可以检查用户是否在文本字段中放置了分组分隔符,然后删除该分组分隔符,以便我可以将输入的值存储为 NSNumber?
据我所知, NSNumberFormatter 没有为此提供方法,我的所有解决方案似乎都非常低效。想问问大家有没有什么好的方法来解决这个问题。
NSNumberFormatter
确实提供了处理逗号、点和空格的方法,事实上,它做得很好。尝试猜测最佳格式的“宽大处理”:
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setLenient:YES];
NSLog(@"%@", [formatter numberFromString:@"123,456.78"]);
NSLog(@"%@", [formatter numberFromString:@"123 456 78"]);
输出:
123456.78
12345678
它可以工作,但是如果用户开始混合事物(例如123,456 789.105
)它会失败。我会亲自替换所有出现的空格,然后使用数字格式化程序。
如果您担心效率,我需要通知您:不要。它只是一个文本输入,每次运行都会使用一次。如果您在每次用户滚动某些内容或数千次计算时都这样做,那么您应该担心。
另外,如果用户要输入非常大的数字,您不认为有更好的界面来处理吗?我不确定您是在编写 iOS 还是 OSX 应用程序,所以这取决于。也许给他一套科学计数法按钮,他可以在哪里选择数字和功率?
[myField.text stringByReplacingOccurrencesOfString:@" " withString:@""]
您可以使用... 等(或使用正则表达式)去除分隔符。
或者,您可以通过指定数字键盘作为输入来防止在字段中输入非数字。