在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 是对象。