2013-02-22 75 views
0

我需要檢查來自服務器的值是NSString,NSInteger還是float。在字符串的情況下,我可以檢查。但我們如何區分浮點數和整數?如何檢查一個數字是否是IOS中的NSInteger或浮點數?

+0

你解析字符串到整數/浮點/字符串? – HKTonyLee 2013-02-22 09:47:29

+2

請添加更多關於如何從服務器獲取此「價值」的詳細信息。 – jimpic 2013-02-22 09:53:08

+0

添加來自服務器的值。 – rptwsthi 2013-02-22 09:58:53

回答

2

(我假設你正在分析從服務器的一些字符串,並將其轉換成整數/浮點/字符串本地。)

客戶端和服務器必須遵守一些規範。例如,浮點必須帶有小數點。或者結果有一個字段來描述具體類型。因爲你無法從字符串值推斷出實際的類型。

詳細說明,如果從服務器看到「9.000」。你不知道它是整數還是浮點數。但是如果你同意小數點的存在意味着浮點數。它將變成浮動狀態,但不是整數。你可以使用這個事實來創建你的解析器。

(重要)此外,從字符串解析浮點通常有數字錯誤。如果服務器的浮點精度低於客戶端,則客戶端無法獲得精確的浮點值。你應該把它解析爲固定點而不是浮點數。

6

這裏是如何做到

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

雖然輸入的類型不清楚,但在大多數情況下,這應該工作:) – jimpic 2013-02-22 10:02:43

+0

是的這個解決方案是好的:)它工作得很好。謝謝 – 2013-02-22 10:40:17

-1

雙VAR = 4.1;

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

1.0是一個浮點數。 – jimpic 2013-02-22 10:01:54

1

簡單的方式將是:

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

if (range.length > 0){ 
    NSLog(@"Double value"); 
} 
else { 
    NSLog(@"Integer value"); 
} 
+0

這對本地化數字格式不安全 – jimpic 2013-02-22 09:58:09