原文鏈接:http://blog.csdn.net/mumubumaopao/article/details/50612171
在Xcode的Foundation框架中,NSFormatter只是一個(gè)抽象類忍啤,我們平常用到的是它的兩個(gè)子類:NSNumberFormatter优床、NSDateFormatter,本篇先介紹NSNumberFormatter,NSDateFormatter會(huì)在下一篇進(jìn)行介紹.
使用NSNumberFormatter可以將NSNumber轉(zhuǎn)化成自己想要的格式來進(jìn)行輸出,同時(shí)NSNumberFormatter也支持使用NSString 類型的對象轉(zhuǎn)換為NSNumber類型的對象
NSNumberFormatter支持的枚舉類型如下,具體對應(yīng)什么類型我會(huì)在代碼里進(jìn)行解釋
typedef CF_ENUM(CFIndex, CFNumberFormatterStyle) {?? ?// number format styles
kCFNumberFormatterNoStyle = 0,
kCFNumberFormatterDecimalStyle = 1,
kCFNumberFormatterCurrencyStyle = 2,
kCFNumberFormatterPercentStyle = 3,
kCFNumberFormatterScientificStyle = 4,
kCFNumberFormatterSpellOutStyle = 5,
kCFNumberFormatterOrdinalStyle CF_ENUM_AVAILABLE(10_11, 9_0) = 6,
kCFNumberFormatterCurrencyISOCodeStyle CF_ENUM_AVAILABLE(10_11, 9_0) = 8,
kCFNumberFormatterCurrencyPluralStyle CF_ENUM_AVAILABLE(10_11, 9_0) = 9,
kCFNumberFormatterCurrencyAccountingStyle CF_ENUM_AVAILABLE(10_11, 9_0) = 10,
};
使用方法一般如下:
一.使用NSNumber轉(zhuǎn)化成自己想要的格式來進(jìn)行輸出
1.先創(chuàng)建一個(gè)NSNumerFormatter對象
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
2.創(chuàng)建一個(gè)NSNumber對象
NSNumber *number = [NSNumber numberWithDouble:12345.655521];
3.設(shè)置NSNumberFomatter的枚舉值類型,
formatter1.numberStyle = kCFNumberFormatterNoStyle;?? //去掉小數(shù)點(diǎn) 四舍五入保留整數(shù) 12346
4.調(diào)用NSNumberFormatter的實(shí)例方法將NSNumebr對象轉(zhuǎn)換為字符串格式:
NSString *strOfFormatter =[formatter stringFromNumber:number];
5.將該字符串輸出
NSLog(@"%@",strOfFormatter);
下面我寫了一個(gè)例子,僅供大家參考:
NSNumberFormatter *formatter1 = [[NSNumberFormatter alloc] init];
NSNumberFormatter *formatter2 = [[NSNumberFormatter alloc] init];
NSNumberFormatter *formatter3 = [[NSNumberFormatter alloc] init];
NSNumberFormatter *formatter4 = [[NSNumberFormatter alloc] init];
NSNumberFormatter *formatter5 = [[NSNumberFormatter alloc] init];
NSNumberFormatter *formatter6 = [[NSNumberFormatter alloc] init];
NSNumberFormatter *formatter7 = [[NSNumberFormatter alloc] init];
NSNumberFormatter *formatter8 = [[NSNumberFormatter alloc] init];
NSNumberFormatter *formatter9 = [[NSNumberFormatter alloc] init];
NSNumberFormatter *formatter10 = [[NSNumberFormatter alloc] init];
//原值 12345.655521
formatter1.numberStyle = kCFNumberFormatterNoStyle;?? //去掉小數(shù)點(diǎn) 四舍五入保留整數(shù) 12346
formatter2.numberStyle = NSNumberFormatterDecimalStyle;?? //以國際化格式輸出 保留三位小數(shù),第四位小數(shù)四舍五入 12,345.66
formatter3.numberStyle = kCFNumberFormatterCurrencyStyle;? //以貨幣通用格式輸出 保留2位小數(shù),第三位小數(shù)四舍五入,在前面添加dollor符號(hào) $12,345.66
formatter4.numberStyle = kCFNumberFormatterPercentStyle;? //以百分制形式輸出? 整個(gè)數(shù)字乘以保留2為小數(shù),第三位小數(shù)四舍五入,然后乘以100,同時(shí)在最后加上百分號(hào)
formatter5.numberStyle = kCFNumberFormatterScientificStyle; //以科學(xué)計(jì)數(shù)法輸出 1.2345655521E4
formatter6.numberStyle = kCFNumberFormatterSpellOutStyle;? //原值英文表示,
// 正常來說應(yīng)該輸出 twelve thousand, three hundred and forty-five point six five five five two one
//實(shí)際輸出 twelve thousand three hundred forty-five point six five five five two one
//少了一個(gè)and ,這個(gè)跟系統(tǒng)設(shè)置的區(qū)域語言有關(guān)系
//還有其他的四種返回格式
formatter7.numberStyle = kCFNumberFormatterOrdinalStyle;? //輸出? 12,346th
formatter8.numberStyle = kCFNumberFormatterCurrencyISOCodeStyle;//輸出 USD12,345.66
formatter9.numberStyle = kCFNumberFormatterCurrencyPluralStyle;//輸出? 12,345.66 US dollars
formatter10.numberStyle = kCFNumberFormatterCurrencyAccountingStyle;//輸出? $12,345.66
NSNumber *number = [NSNumber numberWithDouble:12345.655521];
NSLog(@"kCFNumberFormatterNoStyle=%@", [formatter1 stringFromNumber:number]);
NSLog(@"NSNumberFormatterDecimalStyle=%@", [formatter2 stringFromNumber:number]);
NSLog(@"kCFNumberFormatterCurrencyStyle=%@", [formatter3 stringFromNumber:number]);
NSLog(@"kCFNumberFormatterPercentStyle=%@", [formatter4 stringFromNumber:number]);
NSLog(@"kCFNumberFormatterScientificStyle=%@", [formatter5 stringFromNumber:number]);
NSLog(@"kCFNumberFormatterSpellOutStyle=%@", [formatter6 stringFromNumber:number]);
NSLog(@"kCFNumberFormatterOrdinalStyle=%@", [formatter7 stringFromNumber:number]);
NSLog(@"kCFNumberFormatterCurrencyISOCodeStyle=%@", [formatter8 stringFromNumber:number]);
NSLog(@"kCFNumberFormatterCurrencyPluralStyle=%@", [formatter9 stringFromNumber:number]);
NSLog(@"kCFNumberFormatterCurrencyAccountingStyle=%@", [formatter10 stringFromNumber:number]);
輸出結(jié)果如下:
2016-01-30 18:43:22.169 Test_NFNumberFormatter[1210:29952] kCFNumberFormatterNoStyle=12346
2016-01-30 18:43:22.170 Test_NFNumberFormatter[1210:29952] NSNumberFormatterDecimalStyle=12,345.656
2016-01-30 18:43:22.171 Test_NFNumberFormatter[1210:29952] kCFNumberFormatterCurrencyStyle=$12,345.66
2016-01-30 18:43:22.171 Test_NFNumberFormatter[1210:29952] kCFNumberFormatterPercentStyle=1,234,566%
2016-01-30 18:43:22.171 Test_NFNumberFormatter[1210:29952] kCFNumberFormatterScientificStyle=1.2345655521E4
2016-01-30 18:43:22.172 Test_NFNumberFormatter[1210:29952] kCFNumberFormatterSpellOutStyle=twelve thousand three hundred forty-five point six five five five two one
2016-01-30 18:43:22.172 Test_NFNumberFormatter[1210:29952] kCFNumberFormatterOrdinalStyle=12,346th
2016-01-30 18:43:22.173 Test_NFNumberFormatter[1210:29952] kCFNumberFormatterCurrencyISOCodeStyle=USD12,345.66
2016-01-30 18:43:22.173 Test_NFNumberFormatter[1210:29952] kCFNumberFormatterCurrencyPluralStyle=12,345.66 US dollars
2016-01-30 18:43:22.173 Test_NFNumberFormatter[1210:29952] kCFNumberFormatterCurrencyAccountingStyle=$12,345.66
二.使用NSString 類型的對象轉(zhuǎn)換為NSNumber類型的對象
因?yàn)檗D(zhuǎn)化方式大同小異,所以我就接著上面的代碼寫了:
/*
同時(shí),NSNumberFomatter也支持從NSString類型的對象轉(zhuǎn)為NSNumber類型的對象
現(xiàn)在拿formatter1和formatter2來舉例
先拿到NSString格式的數(shù)字
*/
NSString *strOfFormatter1 = [formatter1 stringFromNumber:number];
NSString *strOfFormatter2 = [formatter2 stringFromNumber:number];
//? 目前 strOfFormatter1 =? 12346
//????? strOfFormatter2 =? 12,345.656
//轉(zhuǎn)化為NSNumber格式
NSNumber *number1 = [formatter1 numberFromString:strOfFormatter1];
NSNumber *number2 = [formatter2 numberFromString:strOfFormatter2];
//打印number
NSLog(@"number1=%@",number1);
NSLog(@"number2=%@",number2);
輸出結(jié)果為:
2016-01-30 19:24:47.400 Test_NFNumberFormatter[1335:49384] number1=12346
2016-01-30 19:24:47.943 Test_NFNumberFormatter[1335:49384] number2=12345.656
總結(jié):NSNumberFormatter可以讓我們方便的在NSString和NSNumber之間進(jìn)行轉(zhuǎn)化,當(dāng)我們需要轉(zhuǎn)化成一些特殊的格式的時(shí)候,這無疑給我們提供了很大的便利.文中提到的有個(gè)別格式是講數(shù)字以通用的描述文字輸出,文中輸出的是twelve thousand three hundred forty-five point six five five five two one,這個(gè)是跟我們設(shè)置的區(qū)域語言參數(shù)有關(guān)系的,如果我們設(shè)置的是China,輸出的文字就將會(huì)是中文的.(有人說通過在Info.plist文件中的字段Localization native development region設(shè)置的,設(shè)置為China就好了)但是我發(fā)現(xiàn)設(shè)置完之后還是沒有辦法打印出來中文的格式,各位可以自己試試.
加入審核被拒交流群献联,一起交流審核上架經(jīng)驗(yàn)吧~~ 群號(hào):689757099