在一些金融类的 App 中,对于表示金额类的字符串,通常需要进行格式化后再显示出来。例如:
0–>0.00123–>123.00123.456–>123.46102000–>102,000.0010204500–>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 介绍和用法