NSNumberFormatter的使用介紹及示例

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

在Xcode的Foundation框架中,NSFormatter只是一個(gè)抽象類(lèi),我們平常用到的是它的兩個(gè)子類(lèi):NSNumberFormatter、NSDateFormatter,本篇先介紹NSNumberFormatter,NSDateFormatter會(huì)在下一篇進(jìn)行介紹.

使用NSNumberFormatter可以將NSNumber轉(zhuǎn)化成自己想要的格式來(lái)進(jìn)行輸出,同時(shí)NSNumberFormatter也支持使用NSString 類(lèi)型的對(duì)象轉(zhuǎn)換為NSNumber類(lèi)型的對(duì)象

NSNumberFormatter支持的枚舉類(lèi)型如下,具體對(duì)應(yīng)什么類(lèi)型我會(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)化成自己想要的格式來(lái)進(jìn)行輸出

1.先創(chuàng)建一個(gè)NSNumerFormatter對(duì)象

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

2.創(chuàng)建一個(gè)NSNumber對(duì)象

NSNumber *number = [NSNumber numberWithDouble:12345.655521];

3.設(shè)置NSNumberFomatter的枚舉值類(lèi)型,

formatter1.numberStyle = kCFNumberFormatterNoStyle;?? //去掉小數(shù)點(diǎn) 四舍五入保留整數(shù) 12346

4.調(diào)用NSNumberFormatter的實(shí)例方法將NSNumebr對(duì)象轉(zhuǎn)換為字符串格式:

NSString *strOfFormatter =[formatter stringFromNumber:number];

5.將該字符串輸出

NSLog(@"%@",strOfFormatter);

下面我寫(xiě)了一個(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;?? //以國(guó)際化格式輸出 保留三位小數(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;? //原值英文表示,

// 正常來(lái)說(shuō)應(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ū)域語(yǔ)言有關(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 類(lèi)型的對(duì)象轉(zhuǎn)換為NSNumber類(lèi)型的對(duì)象

因?yàn)檗D(zhuǎn)化方式大同小異,所以我就接著上面的代碼寫(xiě)了:

/*

同時(shí),NSNumberFomatter也支持從NSString類(lèi)型的對(duì)象轉(zhuǎn)為NSNumber類(lèi)型的對(duì)象

現(xiàn)在拿formatter1和formatter2來(lái)舉例

先拿到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í)候,這無(wú)疑給我們提供了很大的便利.文中提到的有個(gè)別格式是講數(shù)字以通用的描述文字輸出,文中輸出的是twelve thousand three hundred forty-five point six five five five two one,這個(gè)是跟我們?cè)O(shè)置的區(qū)域語(yǔ)言參數(shù)有關(guān)系的,如果我們?cè)O(shè)置的是China,輸出的文字就將會(huì)是中文的.(有人說(shuō)通過(guò)在Info.plist文件中的字段Localization native development region設(shè)置的,設(shè)置為China就好了)但是我發(fā)現(xiàn)設(shè)置完之后還是沒(méi)有辦法打印出來(lái)中文的格式,各位可以自己試試.

加入審核被拒交流群,一起交流審核上架經(jīng)驗(yàn)吧~~ 群號(hào):689757099

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,106評(píng)論 6 542
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,441評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 178,211評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,736評(píng)論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,475評(píng)論 6 412
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,834評(píng)論 1 328
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,829評(píng)論 3 446
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 43,009評(píng)論 0 290
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,559評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,516評(píng)論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,038評(píng)論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,728評(píng)論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 35,132評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 36,443評(píng)論 1 295
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,249評(píng)論 3 399
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,484評(píng)論 2 379

推薦閱讀更多精彩內(nèi)容

  • 通過(guò)NSNumberFormatter,可以設(shè)置NSNumber輸出的格式。例如如下代碼:NSNumberForm...
    泥_叔閱讀 3,259評(píng)論 0 2
  • 01-常量與變量 學(xué)習(xí)swift第一步打印Hello World print("Hello World") swi...
    iOS_恒仔閱讀 5,203評(píng)論 2 19
  • 大批量友誼的脆弱小船在最近說(shuō)翻就翻,每個(gè)人都是翻別人的船,也是被人翻船的那個(gè)人。 《紙牌屋》中的弗蘭西斯·安德伍德...
    足記閱讀 999評(píng)論 0 0
  • 一直都很喜歡寫(xiě)字。大學(xué)的時(shí)候曾在學(xué)校雜志社擔(dān)任編輯,寫(xiě)的字也經(jīng)常被采納收錄于???。后來(lái)畢業(yè)了,筆就撂下了,再不曾...
    十月不遠(yuǎn)閱讀 230評(píng)論 5 5
  • 某神一覺(jué)沉睡千年,驚覺(jué)滄海桑田,時(shí)過(guò)境遷。曾經(jīng)的好友全都消失不見(jiàn),不留一點(diǎn)痕跡,茫茫天地似乎只剩下自己一人,而且周...
    月下半弦閱讀 222評(píng)論 0 0