NSNumberFormatter的使用介绍及示例

在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就好了)但是我发现设置完之后还是没有办法打印出来中文的格式,各位可以自己试试.

时间: 2024-10-03 22:49:23

NSNumberFormatter的使用介绍及示例的相关文章

SharePoint 2013 Word 转换PDF服务介绍及示例

原文:SharePoint 2013 Word 转换PDF服务介绍及示例 前言:在SharePoint使用过程中,经常会发现将文档进行格式转换的需求,之前,看到SharePoint 2013有将PPT转换PDF文档的服务,后来,才发现SharePoint 2010开始,就有将Word文档转换PDF的服务了,用起来还是不错的. 下面,我们就来看看这个服务,如何将一个Word文档库批量转换成PDF文件,或者,将单一Word文档转换为PDF文档. 一.             效果展示 新建测试Wor

smarty 基本介绍及示例

什么是smarty? Smarty是一个使用PHP写出来的模板引擎,是业界最著名的PHP模板引擎之一.Smarty分离了逻辑代码和外在的内容,提供一种易于管理和使用的方法,用来将原本与HTML代码混杂在一起PHP代码逻辑分离.Smarty工作的目的是要使PHP程序员同前端人员分离,使程序员改变程序的逻辑内容不会影响到前端人员的页面设计,前端人员重新修改页面不会影响到程序的程序逻辑,这在多人合作的项目中显的尤为重要. 为什么会诞生smarty? 例如在一个公司,一个应用程序的开发流程如下:在提交计

Erlang基础 -- 介绍 -- Wordcount示例演示

在前两个blog中,已经说了Erlang的历史.应用场景.特点,这次主要演示一个Wordcount的示例,就是给定一个文本文件,统计这个文本文件中的单词以及该单词出现的次数. 今天和群友们讨论了一个问题,突然一下子就上升到哲学角度上了,装逼装大发了. PS:图片中有错别字,%s/财务和其他9个月/财务和其他9个人/g 不过真心想说的一点是,把Erlang系统,映射到现实中,很多奇葩问题,就能迎刃而解了.所以,在下面的简要设计中,我就尽可能的代入一下现实世界吧. 环境安装 mac 的话,用brew

JAVA HashMap详细介绍和示例

第1部分 HashMap介绍 HashMap简介 HashMap 是一个散列表,它存储的内容是键值对(key-value)映射. HashMap 继承于AbstractMap,实现了Map.Cloneable.java.io.Serializable接口. HashMap 的实现不是同步的,这意味着它不是线程安全的.它的key.value都可以为null.此外,HashMap中的映射不是有序的. HashMap 的实例有两个参数影响其性能:"初始容量" 和 "加载因子&quo

unity Dotween插件的简单介绍及示例代码

unity里面做插值动画的插件有许多,比较常见的有itween.hotween.dotween.根据大家的反馈和实际体验来说,dotween插件在灵活性.稳定性.易用性上都十分突出.这里简单介绍下它的用法,并在后文做了一些效果示例,还是不错的. 所谓"插值动画",顾名思义就是在两个值中插入其他的值来实现动画.原理非常简单,比如想让某个物体从A地到达B地,我们只知道A和B的坐标,插值动画就可以根据"缓动函数"确定A.B间的其他值,来实现物体从A到B的"运动过

ArcSDE SDK For Java二次开发介绍、示例

在一个工作中,遇到了需要java后台来查询ArcGIS 中用到的Oracle数据库空间数据,由于对ArcGIS空间数据首次接触,只知道Oracle可以使用ST_GEOMETRY字段存储,如下图 但是查询时会发现这个ST_GEOMETRY字段会在结果中出现个多个子的字段,对于arcgis地理知识了解甚少,不知道单独查询一个坐标怎么弄了,有些朋友说需要配置监听文件. 不管怎么说,至少参考了一个大牛的文章,http://blog.csdn.net/linghe301/article/details/8

C语言 运算符详细介绍及示例代码

C 运算符 运算符是一种告诉编译器执行特定的数学或逻辑操作的符号.C 语言内置了丰富的运算符,并提供了以下类型的运算符: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 杂项运算符 本章将逐一介绍算术运算符.关系运算符.逻辑运算符.位运算符.赋值运算符和其他运算符. 算术运算符 下表显示了 C 语言支持的所有算术运算符.假设变量 A 的值为 10,变量 B 的值为 20,则: 运算符 描述 实例 + 把两个操作数相加 A + B 将得到 30 - 从第一个操作数中减去第二个操作数 A

(转)libevent介绍及示例

一.Libevent简介 libevent是一个基于事件触发的网络库,适用于windows.linux.bsd等多种平台,内部使用select.epoll.kqueue等系统调用管理事件机制.官网:http://libevent.org/ 特点: 事件驱动,高性能; 轻量级,专注于网络,不如ACE那么臃肿庞大,只提供了简单的网络API的封装,线程池,内存池,递归锁等均需要自己实现: 开放源码,代码相当精炼.易读: 跨平台,支持Windows.Linux.BSD和Mac OS: 支持多种I/O多路

C++ stringstream 介绍与示例

C++引入了ostringstream.istringstream.stringstream这三个类,要使用他们创建对象就必须包含<sstream>头文件,通常是用来做数据转换的. istringstream类用于执行C++风格的串流的输入操作. ostringstream类用于执行C风格的串流的输出操作. strstream类同时可以支持C风格的串流的输入输出操作. istringstream类是从istream和stringstreambase派生而来,ostringstream是从ost