iOS对金额千分位显示的问题
2015-12-17 17:44
543 查看
最近在项目中遇到了对金额千分位显示的问题,封装了个函数
//金额千分位显示,保留小数点后两位
后来仔细查了查资料和官方API,现在对NSNumber和NSNumberFormatter这两个类做一个简单的介绍
NSNumber数字类,iOS专门封装起来用于数字的处理,可以用string、double、float初始化
NSNumberFormatter数字格式类,用于定义数字的格式
NSNumber过于简单,不再详述
下面在写一段代码,通过代码讲解下NSNumberFormatter
下面讲下每个函数:
setFormatterBehavior这个设置和版本有关系,一般不用设置,不用这个函数也可以;
setNumberStyle设置文本显示的格式,是个枚举类型,下面是官方文档+个人翻译
setFormatWidth设置字符宽度
setPaddingCharacter设置填充字幕:比如你设置的宽度为9,结果数字只有3位,其它的6位用这个函数设置的字母填充。
还有一些其他的方法,用的不多,这里不再详述。
但是,我们发现,我最上边封装的函数用的并不是这个来格式化输出的,而是用的setPositiveFormat,setPositiveFormat是自定义输出格式可以灵活的设置输出格式,而不是仅仅限于上边枚举的几项
那格式应该怎么定义呢?举几个例子你就明白了
如果原始的数字为677789.98
是不是一目了然啦?不用我再多说什么了吧?如果有多个自定义条件,就用;分开
说这这里,你是不是有个疑惑?”#“和“0”有什么不同呢?开始我也有这个疑惑,但是经过大量的实验发现”#“和“0”代表的含义没有任何区别,完全可以相互替换。
//金额千分位显示,保留小数点后两位
+ (NSString *)positiveFormat:(NSString *)text{ if(!text || [text floatValue] == 0){ return @"0.00"; }else{ NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; [numberFormatter setPositiveFormat:@",###.00;"]; return [numberFormatter stringFromNumber:[NSNumber numberWithDouble:[text doubleValue]]]; } return @""; }
后来仔细查了查资料和官方API,现在对NSNumber和NSNumberFormatter这两个类做一个简单的介绍
NSNumber数字类,iOS专门封装起来用于数字的处理,可以用string、double、float初始化
NSNumberFormatter数字格式类,用于定义数字的格式
NSNumber过于简单,不再详述
下面在写一段代码,通过代码讲解下NSNumberFormatter
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; [formatter setFormatterBehavior:NSFoundationVersionNumber10_4]; [formatter setNumberStyle:NSNumberFormatterScientificStyle]; [formatter setFormatWidth:9]; // set width [formatter setPaddingCharacter:@"x"]; // choice padding Char NSString *convertNumber = [formatter stringFromNumber:number];
下面讲下每个函数:
setFormatterBehavior这个设置和版本有关系,一般不用设置,不用这个函数也可以;
setNumberStyle设置文本显示的格式,是个枚举类型,下面是官方文档+个人翻译
enum { NSNumberFormatterNoStyle = kCFNumberFormatterNoStyle, NSNumberFormatterDecimalStyle = kCFNumberFormatterDecimalStyle, NSNumberFormatterCurrencyStyle = kCFNumberFormatterCurrencyStyle, NSNumberFormatterPercentStyle = kCFNumberFormatterPercentStyle, NSNumberFormatterScientificStyle = kCFNumberFormatterScientificStyle, NSNumberFormatterSpellOutStyle = kCFNumberFormatterSpellOutStyle }; typedef NSUInteger NSNumberFormatterStyle; Constants NSNumberFormatterNoStyle Specifies no style.//无格式 Available in OS X v10.4 and later. NSNumberFormatterDecimalStyle Specifies a decimal style format.//十进制格式 Available in OS X v10.4 and later. NSNumberFormatterCurrencyStyle Specifies a currency style format.//当前系统货币格式(如果是中文就是人民币符号¥) Available in OS X v10.4 and later. NSNumberFormatterPercentStyle Specifies a percent style format.//百分数格式 Available in OS X v10.4 and later. NSNumberFormatterScientificStyle Specifies a scientific style format.//科学技术发格式 Available in OS X v10.4 and later. NSNumberFormatterSpellOutStyle Specifies a spell-out format; for example, “23” becomes “twenty-three”.//阿拉伯数字转化为文字的格式如“23”变为二三 Available in OS X v10.4 and later.
setFormatWidth设置字符宽度
setPaddingCharacter设置填充字幕:比如你设置的宽度为9,结果数字只有3位,其它的6位用这个函数设置的字母填充。
还有一些其他的方法,用的不多,这里不再详述。
但是,我们发现,我最上边封装的函数用的并不是这个来格式化输出的,而是用的setPositiveFormat,setPositiveFormat是自定义输出格式可以灵活的设置输出格式,而不是仅仅限于上边枚举的几项
那格式应该怎么定义呢?举几个例子你就明白了
如果原始的数字为677789.98
[numberFormatter setPositiveFormat:@",###.00”];//输出:677,789.98 [numberFormatter setPositiveFormat:@".00;”]//输出:677789.98 [numberFormatter setPositiveFormat:@“0%;”]//输出:67778998% [numberFormatter setPositiveFormat:@“0.00%;”]//输出:67778998.00%
是不是一目了然啦?不用我再多说什么了吧?如果有多个自定义条件,就用;分开
说这这里,你是不是有个疑惑?”#“和“0”有什么不同呢?开始我也有这个疑惑,但是经过大量的实验发现”#“和“0”代表的含义没有任何区别,完全可以相互替换。
相关文章推荐
- ios开发同一个lab显示不同的颜色
- iOS 剪切圆形图片
- iOS xib文件引入的两种方式
- IOS_AFNetworking
- ios开发同一个版本多次提交不想改变版本号的解决方法
- iOS应用之间的跳转与数据传递
- IOS常用第三方框架
- iOS开发textfield的一些方法汇总
- IOS提醒用户重新授权打开定位功能
- IOS开发银行系统的四舍五入的算法
- ios文件路径
- iOS pop到前一个页面时键盘闪一下的问题
- iOS提醒用户进入设置界面进行重新授权通知定位等功能
- 解决navigationbar颜色不纯问题
- iOS适配 旧项目工程在iOS9下不能正常显示
- iOS中通知机制
- iOS21 广告服务
- JS判断客户端是否是iOS或者Android
- assert 在iOS 中的作用
- iOS分享 - AFNetworking之多图片/文件上传