0

我需要检查来自服务器的值是 NSString 、 NSInteger 还是 float。如果是字符串,我可以检查。但是我们如何区分浮点数和整数?

4

5 回答 5

11

这是怎么做

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");
        }
    }
于 2013-02-22T09:41:39.190 回答
2

(我假设您正在从服务器解析一些字符串。并将其转换为本地的 int/float/string。)

客户端和服务器都必须就某些规范达成一致。例如,浮点数必须带有小数点。或者结果有一个更多的字段来描述具体类型。因为您无法从字符串值推断出实际类型。

详细地说,如果您从服务器看到“9.000”。你不知道它是 int 还是 float。但是如果你同意小数点的存在意味着浮点数。它会变成浮点数,但不是整数。你可以使用这个事实来制作你的解析器。

(重要)此外,从字符串中解析浮点数通常会出现数值错误。如果服务器的浮点精度低于客户端,则客户端无法获得准确的浮点值。您应该将其解析为定点而不是浮点。

于 2013-02-22T09:50:21.440 回答
1

简单的方法是:

NSRange range = [yourString rangeOfString:@"."];

if (range.length > 0){
  NSLog(@"Double value");
}
else {
  NSLog(@"Integer value");
}
于 2013-02-22T09:57:09.533 回答
0

我就是这样做的。

- (BOOL)isFloatNumber:(NSNumber *)value {
    if ([[value stringValue] containsString:@"."]) {
        return YES;
    }
    return NO;
}
于 2020-10-16T08:32:48.587 回答
-1

双变量= 4.1;

if(ceil(var) == var){
      //Int value
    }else{
     //Float value
    }
于 2013-02-22T09:47:47.150 回答