我需要檢查來自服務器的值是NSString,NSInteger還是float。在字符串的情況下,我可以檢查。但我們如何區分浮點數和整數?如何檢查一個數字是否是IOS中的NSInteger或浮點數?
回答
(我假設你正在分析從服務器的一些字符串,並將其轉換成整數/浮點/字符串本地。)
客戶端和服務器必須遵守一些規範。例如,浮點必須帶有小數點。或者結果有一個字段來描述具體類型。因爲你無法從字符串值推斷出實際的類型。
詳細說明,如果從服務器看到「9.000」。你不知道它是整數還是浮點數。但是如果你同意小數點的存在意味着浮點數。它將變成浮動狀態,但不是整數。你可以使用這個事實來創建你的解析器。
(重要)此外,從字符串解析浮點通常有數字錯誤。如果服務器的浮點精度低於客戶端,則客戶端無法獲得精確的浮點值。你應該把它解析爲固定點而不是浮點數。
這裏是如何做到
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");
}
}
雖然輸入的類型不清楚,但在大多數情況下,這應該工作:) – jimpic 2013-02-22 10:02:43
是的這個解決方案是好的:)它工作得很好。謝謝 – 2013-02-22 10:40:17
雙VAR = 4.1;
if(ceil(var) == var){
//Int value
}else{
//Float value
}
1.0是一個浮點數。 – jimpic 2013-02-22 10:01:54
簡單的方式將是:
NSRange range = [yourString rangeOfString:@"."];
if (range.length > 0){
NSLog(@"Double value");
}
else {
NSLog(@"Integer value");
}
這對本地化數字格式不安全 – jimpic 2013-02-22 09:58:09
你解析字符串到整數/浮點/字符串? – HKTonyLee 2013-02-22 09:47:29
請添加更多關於如何從服務器獲取此「價值」的詳細信息。 – jimpic 2013-02-22 09:53:08
添加來自服務器的值。 – rptwsthi 2013-02-22 09:58:53