NSNumberFormatter的使用介紹及示例

原文鏈接:http://blog.csdn.net/mumubumaopao/article/details/50612171

在Xcode的Foundation框架中,NSFormatter只是一個抽象類,我們平常用到的是它的兩個子類:NSNumberFormatter、NSDateFormatter,本篇先介紹NSNumberFormatter,NSDateFormatter會在下一篇進行介紹.

使用NSNumberFormatter可以將NSNumber轉化成自己想要的格式來進行輸出,同時NSNumberFormatter也支持使用NSString 類型的對象轉換為NSNumber類型的對象

NSNumberFormatter支持的枚舉類型如下,具體對應什么類型我會在代碼里進行解釋

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轉化成自己想要的格式來進行輸出

1.先創建一個NSNumerFormatter對象

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];

2.創建一個NSNumber對象

NSNumber *number = [NSNumber numberWithDouble:12345.655521];

3.設置NSNumberFomatter的枚舉值類型,

formatter1.numberStyle = kCFNumberFormatterNoStyle;?? //去掉小數點 四舍五入保留整數 12346

4.調用NSNumberFormatter的實例方法將NSNumebr對象轉換為字符串格式:

NSString *strOfFormatter =[formatter stringFromNumber:number];

5.將該字符串輸出

NSLog(@"%@",strOfFormatter);

下面我寫了一個例子,僅供大家參考:

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;?? //去掉小數點 四舍五入保留整數 12346

formatter2.numberStyle = NSNumberFormatterDecimalStyle;?? //以國際化格式輸出 保留三位小數,第四位小數四舍五入 12,345.66

formatter3.numberStyle = kCFNumberFormatterCurrencyStyle;? //以貨幣通用格式輸出 保留2位小數,第三位小數四舍五入,在前面添加dollor符號 $12,345.66

formatter4.numberStyle = kCFNumberFormatterPercentStyle;? //以百分制形式輸出? 整個數字乘以保留2為小數,第三位小數四舍五入,然后乘以100,同時在最后加上百分號

formatter5.numberStyle = kCFNumberFormatterScientificStyle; //以科學計數法輸出 1.2345655521E4

formatter6.numberStyle = kCFNumberFormatterSpellOutStyle;? //原值英文表示,

// 正常來說應該輸出 twelve thousand, three hundred and forty-five point six five five five two one

//實際輸出 twelve thousand three hundred forty-five point six five five five two one

//少了一個and ,這個跟系統設置的區域語言有關系

//還有其他的四種返回格式

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]);

輸出結果如下:

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 類型的對象轉換為NSNumber類型的對象

因為轉化方式大同小異,所以我就接著上面的代碼寫了:

/*

同時,NSNumberFomatter也支持從NSString類型的對象轉為NSNumber類型的對象

現在拿formatter1和formatter2來舉例

先拿到NSString格式的數字

*/

NSString *strOfFormatter1 = [formatter1 stringFromNumber:number];

NSString *strOfFormatter2 = [formatter2 stringFromNumber:number];

//? 目前 strOfFormatter1 =? 12346

//????? strOfFormatter2 =? 12,345.656

//轉化為NSNumber格式

NSNumber *number1 = [formatter1 numberFromString:strOfFormatter1];

NSNumber *number2 = [formatter2 numberFromString:strOfFormatter2];

//打印number

NSLog(@"number1=%@",number1);

NSLog(@"number2=%@",number2);

輸出結果為:

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

總結:NSNumberFormatter可以讓我們方便的在NSString和NSNumber之間進行轉化,當我們需要轉化成一些特殊的格式的時候,這無疑給我們提供了很大的便利.文中提到的有個別格式是講數字以通用的描述文字輸出,文中輸出的是twelve thousand three hundred forty-five point six five five five two one,這個是跟我們設置的區域語言參數有關系的,如果我們設置的是China,輸出的文字就將會是中文的.(有人說通過在Info.plist文件中的字段Localization native development region設置的,設置為China就好了)但是我發現設置完之后還是沒有辦法打印出來中文的格式,各位可以自己試試.

加入審核被拒交流群,一起交流審核上架經驗吧~~ 群號:689757099

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 通過NSNumberFormatter,可以設置NSNumber輸出的格式。例如如下代碼:NSNumberForm...
    泥_叔閱讀 3,263評論 0 2
  • 01-常量與變量 學習swift第一步打印Hello World print("Hello World") swi...
    iOS_恒仔閱讀 5,223評論 2 19
  • 大批量友誼的脆弱小船在最近說翻就翻,每個人都是翻別人的船,也是被人翻船的那個人。 《紙牌屋》中的弗蘭西斯·安德伍德...
    足記閱讀 1,003評論 0 0
  • 一直都很喜歡寫字。大學的時候曾在學校雜志社擔任編輯,寫的字也經常被采納收錄于校刊中。后來畢業了,筆就撂下了,再不曾...
    十月不遠閱讀 236評論 5 5
  • 某神一覺沉睡千年,驚覺滄海桑田,時過境遷。曾經的好友全都消失不見,不留一點痕跡,茫茫天地似乎只剩下自己一人,而且周...
    月下半弦閱讀 231評論 0 0