当商城等相关需要显示价格相关的需求产生,我们便面临着如何简洁又准确地把一串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循环的方式写逻辑解决问题了,快速便捷好有效!