相信大家都用过NSDateFormatter来格式化时间,而对相似的 NSNumberFormatter的用法知之甚少,接下来就讲解一下其用法.
大家可能碰到过这样的问题,当我们统计数字时,数字比较大的时候,要用一定的格式将其展现的比较直观,比如手机号,几亿的总额,银行卡号等等...
1.我们可能会这样:
//正常号转银行卡号 -增加4位间的空格
-(NSString *)normalNumToBankNum
{
NSString *tmpStr = [self bankNumToNormalNum];
int size = (tmpStr.length / 4);
NSMutableArray *tmpStrArr = [[NSMutableArray alloc] init];
for (int n = 0;n < size; n++)
{
[tmpStrArr addObject:[tmpStr substringWithRange:NSMakeRange(n*4, 4)]];
}
[tmpStrArr addObject:[tmpStr substringWithRange:NSMakeRange(size*4, (tmpStr.length % 4))]];
tmpStr = [tmpStrArr componentsJoinedByString:@" "];
return tmpStr;
}
//银行卡号转正常号 -去除4位间的空格
-(NSString *)bankNumToNormalNum
{
return [@"27398239020232431" stringByReplacingOccurrencesOfString:@" " withString:@""];
}
NSNumber *number = [NSNumber numberWithLongLong:27398239020232431];
NSNumberFormatter *formatter1 = [NSNumberFormatter new];
[formatter1 setUsesGroupingSeparator:YES];
[formatter1 setGroupingSize:4];
[formatter1 setGroupingSeparator:@"-"];
NSString *res = [formatter1 stringFromNumber:number];
结果:2-7398-2390-2023-2432
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.numberStyle = NSNumberFormatterDecimalStyle;
NSString *string = [formatter stringFromNumber:[NSNumber numberWithInt:27398239020232431]];
NSLog(@"number string:%@",string);
输出结果为: number string:27,398,239,020,232,431
enum {
NSNumberFormatterNoStyle = kCFNumberFormatterNoStyle,
NSNumberFormatterDecimalStyle = kCFNumberFormatterDecimalStyle,
NSNumberFormatterCurrencyStyle = kCFNumberFormatterCurrencyStyle,
NSNumberFormatterPercentStyle = kCFNumberFormatterPercentStyle,
NSNumberFormatterScientificStyle = kCFNumberFormatterScientificStyle,
NSNumberFormatterSpellOutStyle = kCFNumberFormatterSpellOutStyle
};
typedef NSUInteger NSNumberFormatterStyle;
各个枚举对应输出数字格式的效果如下:
[1243:403] Formatted number string:123456789
[1243:403] Formatted number string:123,456,789
[1243:403] Formatted number string:¥123,456,789.00
[1243:403] Formatted number string:-539,222,988%
[1243:403] Formatted number string:1.23456789E8
[1243:403] Formatted number string:一亿二千三百四十五万六千七百八十九