5

我试过搜索,但我认为我的谷歌技术不够好,所以我正在寻求人们的帮助。我正在扫描一个字符串并获取每个元素。我需要找出它是数字还是文本。我以这种方式进行了检查:

// Try to convert to double
@try{
double whatever=[myString doubleValue];

// If text is stored in myString, then it should throw an exception
} @catch (NSException *e){

// Do whatever I need, but here I know that it's text, not a number


}

但是我发现Objective-C不会抛出异常,它只是返回0。我不能依赖用户不会使用零作为输入这一事实,我该怎么办?

提前谢谢,我很确定有这样的踏板,我只是没有找到它们......

4

5 回答 5

2

转换为双精度并返回字符串。如果它匹配源,那么它是一个双。小心前导和尾随空格。

于 2012-12-19T02:23:31.857 回答
2

尝试这个:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];

NSNumber *number = [formatter numberFromString:myString];

if (number) {
  // it's a number
} else {
  // it's not a number
}
于 2012-12-19T03:57:10.390 回答
1

您可以使用NSScanner类来确定您是否double使用此方法有效:

- (BOOL)scanDouble:(double *)doubleValue

一旦你用你的字符串初始化了你的扫描仪。


为什么(double *)
因为您希望该方法向您返回 2 个信息,the doubleValue并且is it a valid double. 后者由 BOOL 给出,对于前者,只有指针可以从方法调用中获取值(除了返回值)

参数
doubleValue
返回时,包含扫描的值。上溢时包含 HUGE_VAL 或 –HUGE_VAL,下溢时包含 0.0。
返回值
如果接收方找到有效的浮点表示,则返回 YES,否则返回 NO。

于 2012-12-19T02:27:16.200 回答
0

例子:

NSError* error;
NSString* string=@"10";
NSNumberFormatter* formatter=[NSNumberFormatter new];
formatter.numberStyle= NSNumberFormatterDecimalStyle; // set whatever style you need
NSNumber* number;
if([formatter getObjectValue: &number forString: string errorDescription: &error])
{
    // You got the number
    NSLog(@"%@",number);
}
else
{
    // haven't got the number, the string is invalid
    NSLog(@"%@",error);
}
于 2012-12-19T02:50:56.107 回答
0
NSMutableString *stringElement = [NSMutableString stringWithCapacity:[yourString length]];
for (int i=0; i<[yourString length]; i++) {
    if (isdigit([stringElement characterAtIndex:i])) {
      //is digit
    }
}
于 2012-12-19T02:33:36.683 回答