从NSString中获取可能具有分组分隔符的数字(逗号,小数,空格)

时间:2013-08-12 23:56:47

标签: objective-c nsstring nsnumber

我有几个文本字段,用户输入一个数字,我用该数字进行各种计算。由于这些数字可能非常大,我觉得有些用户可能会在输入的值中放入分组分隔符(逗号,空格,小数)。

有没有一种方法可以检查用户是否在文本字段中放置了分组分隔符,然后删除该分组分隔符,以便将输入的值存储为NSNumber?

据我所知,NSNumberFormatter没有为此提供方法,我的所有解决方案似乎效率都很低。我想知道你们是否有任何好办法解决这个问题。

2 个答案:

答案 0 :(得分:1)

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应用程序,所以它取决于你。也许给他一套科学的符号按钮,在那里他可以选择数字和力量?

答案 1 :(得分:0)

您可以使用[myField.text stringByReplacingOccurrencesOfString:@" " withString:@""]剥离分隔符  ......等(或使用正则表达式)。

或者您可以通过指定数字键盘作为输入来阻止字段上的非数字输入。