SwiftUIiOS相关记录本

ios 用系统自带的NSNumberFormatter解决金额显

2019-05-10  本文已影响0人  紫释沐沐

  当商城等相关需要显示价格相关的需求产生,我们便面临着如何简洁又准确地把一串number数据转化成1,234.00这样的显示问题。
  当然,最简单粗暴的方式,便是for循环自己写逻辑,判断是否存在小数点,判断每三位插入一个逗号符。这样的方式自然是可以的,只是会显得比较傻一点,一般我会把这种方式当成最后的备选方案。
  系统还是很强大的,很贴心的为我们提供了便捷的转格式的方法,即NSNumberFormatter这个类。其实,看到Formatter这个字样就很熟悉了,我们可能对这个不熟悉,但一定对日期格式转换很熟悉。没错,只要我们设定要我们要的显示格式,将格式设置好,这个功能便可以将number型的值转化成任何我们想要的格式。
  举个简单的例子:

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setPositiveFormat:@"###,##0.00;"]; 
NSString *formattedNumberString = [numberFormatter stringFromNumber:money];
@"###,##0.00;"  ---  这个格式的意思是:整数部分从右往左每三位添加一个逗号,数据始终保留两位小数
即:money = 123456   formattedNumberString = 123,456.00
@"#,###.##;"  ---  这个格式的意思是:整数部分从右往左每三位添加一个逗号,数据最多保留两位小数
即:money = 123456   formattedNumberString = 123,456
即:money = 123456.0   formattedNumberString = 123,456
即:money = 123456.1   formattedNumberString = 123,456.1
即:money = 123456.12   formattedNumberString = 123,456.12
即:money = 123456.123   formattedNumberString = 123,456.12

  当然系统还提供了便捷的属性设置,可直接设置格式

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
numberFormatter.numberStyle = NSNumberFormatterDecimalStyle; 
NSString *formattedNumberString = [numberFormatter stringFromNumber:money];
NSNumberFormatterDecimalStyle  ---  这个格式的意思是:整数部分从右往左每三位添加一个逗号,数据最多保留三位小数,和上述@"#,###.##;"和效果相似,没有小数的话会直接显示成整数,但是默认小数最多三位

  具体每个枚举类型对应这什么样的格式,官方文档上也给出了详细的解释,并附上了具体例子。(查询流程:点击Xcode->选择上方的Help->选择下拉框中的Developer Documentation->搜索框搜索NSNumberFormatterStyle->选择具体语言(Object-c或Swift等)回车即可)
  这样子我们就能完美解决数字显示格式的问题,而不至于一遍遍自己去用for循环的方式写逻辑解决问题了,快速便捷好有效!

上一篇 下一篇

猜你喜欢

热点阅读