在一些金融类的 App 中,对于表示金额类的字符串,通常需要进行格式化后再显示出来。例如:
0
–>0.00
123
–>123.00
123.456
–>123.46
102000
–>102,000.00
10204500
–>10,204,500.00
它的规则如下:
个位数起每隔三位数字添加一个逗号,同时保留两位小数,也称为“千分位格式”。
我们一开始采取了一种比较笨拙的处理方式如下:
首先根据小数点 .
将传入的字符串分割为两部分,整数部分和小数部分(如果没有小数点,则补 .00
,如果有多个小数点则报金额格式错误)。对于小数部分,只取前两位;然后对整数部分字符串进行遍历,从右到左,每三位数前插入一个逗号 ,
,最后再把两部分拼接起来,代码大致如下:
1 | - (NSString *)moneyFormat:(NSString *)money { |
其中,stringFormatToThreeBit:
方法的实现如下:
1 | - (NSString *)stringFormatToThreeBit:(NSString *)string { |
上述实现看起来非常繁琐。
其实,苹果提供了 NSNumberFormatter
用来处理 NSString
和 NSNumber
之间的转化,可以满足基本的数字形式的格式化。
我们通过设置 NSNumberFormatter
的 numberStyle
和 positiveFormat
属性,即可实现上述功能,非常简洁,代码如下:
1 | - (NSString *)formatDecimalNumber:(NSString *)string { |
关于 NSNumberFormatter
更详细的用法,可以参考这篇文章的介绍:NSNumberFormatter 介绍和用法