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");
}

編集

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 に答える