如何检查一个数字是否是NSInteger或浮点在IOS?

我需要检查一个来自服务器的值是NSString,NSInteger还是float。 在string的情况下,我可以检查。但我们如何区分浮点数和整数?

(我假设你正在parsing一些来自服务器的string,并将其转换为本地的int / float / string。)

客户端和服务器都必须达成一些规范。 例如,浮点必须带有小数点。 或者结果有一个字段来描述具体的types。 因为你不能从string值推断出实际的types。

详细说明,如果你看到“9.000”从服务器。 你不知道它是int还是float。 但是如果你同意小数点的存在意味着浮点数。 它将成为浮动,但不是整数。 你可以使用这个事实来创build你的parsing器。

(重要)此外,从stringparsing浮点通常有数字错误。 如果服务器的浮点精度低于客户端,则客户端无法获得精确的浮点值。 你应该把它parsing成定点而不是浮点。

这是如何做的

NSNumber * n = //from somewhere if (strcmp([n objCType], @encode(float)) == 0) { NSLog(@"this is a float"); } else if (strcmp([n objCType], @encode(int)) == 0) { NSLog(@"this is an int"); } 

编辑

好吧,让我们更通用

  NSNumber *anyNSObject = [NSNumber numberWithFloat:0.4]; id obj = anyNSObject; //you can pass anything here as long as it is inherited from NSObject if ([obj isKindOfClass:[NSString class]]) { NSLog(@"This is string"); } if ([obj isKindOfClass:[NSNumber class]]) { NSLog(@"This is NSNumber"); if (strcmp([obj objCType], @encode(float)) == 0) { NSLog(@"this is a float"); } else if (strcmp([obj objCType], @encode(int)) == 0) { NSLog(@"this is an int"); } } 

简单的方法将是:

 NSRange range = [yourString rangeOfString:@"."]; if (range.length > 0){ NSLog(@"Double value"); } else { NSLog(@"Integer value"); } 

双var = 4.1;

 if(ceil(var) == var){ //Int value }else{ //Float value }