我需要检查来自服务器的值是 NSString 、 NSInteger 还是 float。如果是字符串,我可以检查。但是我们如何区分浮点数和整数?
问问题
2156 次
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 回答