Objective-c中數字型字符串轉換NSNumber的三種方法

在MAC OS/iOS 開發時,我們會遇到這類情況。如何將輸入的符合數字格式的字符串,轉換成NSNumber 類型的對象。

我首先寫了這個方法:

 

C代碼  收藏代碼
  1. id result;  
  2.   
  3. NSString * ss;  
  4.   
  5.   
  6.   
  7. ss=@"124";  
  8.   
  9.   
  10.   
  11. result=[NSNumber numberWithFloat:[ss floatValue]];  
  12.   
  13.   
  14.   
  15. NSLog(@"%f",[ss floatValue]);  
  16.   
  17. NSLog(@"%f",[result floatValue]);   
 

 

直接將NSString 類的floatValue 方法將ss 對象轉成float 類型,再使用NSNumber 的numberWithFloat 方法轉成NSNumber 類型的對象。

但這裏有一個問題, 如果ss 不是@”111.22 ” ,而是@ “xxx ”,則該方法將報錯的。

因此,這裏需要一個事先判斷,判斷ss 是不是能轉成成NSNumber 。

根據這個修改要求,我再將代碼轉換成這樣:

C代碼  收藏代碼
  1. ss=@"224.34129";  
  2.   
  3.   
  4.   
  5.   NSNumberFormatter *f = [[NSNumberFormatter alloc] init];  
  6.   
  7.   
  8.   
  9.   if ([f numberFromString:ss])  
  10.   
  11.   {  
  12.   
  13.       result=[NSNumber numberWithFloat:[ss floatValue]];  
  14.   
  15.   }  
  16.   
  17.   else  
  18.   
  19.   {  
  20.   
  21.       result=ss;  
  22.   
  23.   }  
  24.   
  25.   
  26.   
  27.   NSLog(@"%.2f",[result floatValue]);   

 

 

這樣,功能是沒有問題了。但看過之後,覺得有點累贅感。

代碼簡潔點可不可以呢?最終修改成這樣幾行,如下所示:

 

C代碼  收藏代碼
  1. ss=@"324.34";  
  2.   
  3.   
  4.   
  5.  result=[f numberFromString:ss];  
  6.   
  7.  if(!(result))  
  8.   
  9.  {  
  10.   
  11.      result=ss;  
  12.   
  13.  }  
  14.   
  15.   
  16.   
  17.  NSLog(@"%.2f",[result floatValue]);  

測試結果如下: 

2012-08-07 17:35:04.203 apple1[2484] 124.000000

2012-08-07 17:35:04.203 apple1[2484] 124.000000

2012-08-07 17:35:04.203 apple1[2484] 224.34

2012-08-07 17:35:04.203 apple1[2484] 324.34

 

對於這個方法,我做了幾次修改。當然,這是自己本着愛好再寫,如果到真實項目中,可能在第一步就停滯了。

在這個方法的編寫中,我理解了NSNumber 、NSString 、float 三個類型的關係,及其之間的相互轉換。float 是原始類型,NSNumber 和NSString 是對象。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章