在MAC OS/iOS 開發時,我們會遇到這類情況。如何將輸入的符合數字格式的字符串,轉換成NSNumber 類型的對象。
我首先寫了這個方法:
- id result;
- NSString * ss;
- ss=@"124";
- result=[NSNumber numberWithFloat:[ss floatValue]];
- NSLog(@"%f",[ss floatValue]);
- NSLog(@"%f",[result floatValue]);
直接將NSString 類的floatValue 方法將ss 對象轉成float 類型,再使用NSNumber 的numberWithFloat 方法轉成NSNumber 類型的對象。
但這裏有一個問題, 如果ss 不是@”111.22 ” ,而是@ “xxx ”,則該方法將報錯的。
因此,這裏需要一個事先判斷,判斷ss 是不是能轉成成NSNumber 。
根據這個修改要求,我再將代碼轉換成這樣:
- ss=@"224.34129";
- NSNumberFormatter *f = [[NSNumberFormatter alloc] init];
- if ([f numberFromString:ss])
- {
- result=[NSNumber numberWithFloat:[ss floatValue]];
- }
- else
- {
- result=ss;
- }
- NSLog(@"%.2f",[result floatValue]);
這樣,功能是沒有問題了。但看過之後,覺得有點累贅感。
代碼簡潔點可不可以呢?最終修改成這樣幾行,如下所示:
- ss=@"324.34";
- result=[f numberFromString:ss];
- if(!(result))
- {
- result=ss;
- }
- 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 是對象。