サーバーからの値が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");
}
編集
OK、もっと一般的にしましょう
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に変換します。)
クライアントとサーバーの両方が何らかの仕様に同意する必要があります。たとえば、浮動小数点には小数点が付いている必要があります。または、結果には、具体的なタイプを説明するためのもう1つのフィールドがあります。文字列値から実際の型を推測できないためです。
詳述すると、サーバーから「9.000」が表示された場合。それがintなのかfloatなのかわかりません。しかし、小数点の存在が浮動小数点を意味することに同意する場合。floatになりますが、intにはなりません。この事実を使用して、パーサーを作成できます。
(重要)さらに、文字列から浮動小数点を解析すると、通常、数値エラーが発生します。サーバーの浮動小数点精度がクライアントよりも低い場合、クライアントは正確な浮動小数点値を取得できません。浮動小数点ではなく固定小数点として解析する必要があります。
于 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
double var = 4.1;
if(ceil(var) == var){
//Int value
}else{
//Float value
}
于 2013-02-22T09:47:47.150 に答える