最近需要格式化NSNumber,因为iOS有比较规范的NSNumber转NSString,所以想研究一下
其中比较常用的是
/*
enum {
NSNumberFormatterNoStyle = kCFNumberFormatterNoStyle, 默认转化
NSNumberFormatterDecimalStyle = kCFNumberFormatterDecimalStyle, 小数
NSNumberFormatterCurrencyStyle = kCFNumberFormatterCurrencyStyle, 金钱 会根据语言区域转化
NSNumberFormatterPercentStyle = kCFNumberFormatterPercentStyle, 百分比
NSNumberFormatterScientificStyle = kCFNumberFormatterScientificStyle, 科学计数
NSNumberFormatterSpellOutStyle = kCFNumberFormatterSpellOutStyle 英文输出 会根据语言区域转化
};
*/
金额转化中会根据手机设置的语言和区域进行不同方面的转化
-(NSString *)getStrFromNumber:(NSNumber *)num style:(NSNumberFormatterStyle)style{
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
numberFormatter.numberStyle = style;
/** *得到本机现在用的语言 * en:英文 zh-Hans:简体中文 zh-Hant:繁体中文 ja:日本 ...... */
//
if (style == kCFNumberFormatterCurrencyStyle) {
NSString *strLanguage = [[[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"] objectAtIndex:0];
if ([strLanguage containsString:@"zh-Hans"]||[strLanguage containsString:@"CN"]) {
//想要格式化金额 其中有语言和地区设置
//语言是前半部分 简体中文是zh-Hans
//后半部分是地区 中国是CN
//这个比较人性化的地方是
//当语言设定为简体中文 不管地区是否是中国 都是¥+金额
//当地区设置为中国的时候 为CN¥+金额
numberFormatter.locale = [NSLocale currentLocale];
}
NSLog(@"strLanguage:%@",strLanguage);
}
NSString *str = [numberFormatter stringFromNumber:num];
return str;
}
还有就是自定义转化
需要注意的是
1 自定义转化不能和FormatStyle共用
2 自定义中的postiveFormat和FormatWiath,paddingCharacter共用
NSNumber *number = @1234567.89234;
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
numberFormatter.numberStyle = kCFNumberFormatterDecimalStyle;
numberFormatter.formatWidth = 20;
numberFormatter.paddingCharacter = @"a";
//numberFormatter.positiveFormat = @",###.00";
//,### 分割 .00 两位小数 这是比较常用的
//positiveFormat 和 formatWidth,paddingCharacter 不能一块用
NSString *string = [numberFormatter stringFromNumber:number];
NSLog(@"Formatted number string:%@",string);
输出
Formatted number string:aaaaaaa1,234,567.892
常用的
//常用格式化
NSArray *arrStyle = @[[NSNumber numberWithInteger:kCFNumberFormatterNoStyle],
[NSNumber numberWithInteger:kCFNumberFormatterDecimalStyle],
[NSNumber numberWithInteger:kCFNumberFormatterCurrencyStyle],
[NSNumber numberWithInteger:kCFNumberFormatterPercentStyle],
[NSNumber numberWithInteger:kCFNumberFormatterScientificStyle],
[NSNumber numberWithInteger:kCFNumberFormatterSpellOutStyle]];
for (NSNumber *n in arrStyle) {
[self showNumberStyle:[n integerValue]];
}
-(void)showNumberStyle:(NSNumberFormatterStyle)style{
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.numberStyle = style;
NSString *string = [formatter stringFromNumber:[NSNumber numberWithInt:123456789]];
NSLog(@"Formatted number string:%@",string);
}
输出
2016-12-22 10:37:23.897448 NSNumberFormatterDemo[1454:400609] Formatted number string:123456789
2016-12-22 10:37:23.898203 NSNumberFormatterDemo[1454:400609] Formatted number string:123,456,789
2016-12-22 10:37:23.899170 NSNumberFormatterDemo[1454:400609] Formatted number string:¥123,456,789.00
2016-12-22 10:37:23.899710 NSNumberFormatterDemo[1454:400609] Formatted number string:2,147,483,647%
2016-12-22 10:37:23.900402 NSNumberFormatterDemo[1454:400609] Formatted number string:1.23456789E8
2016-12-22 10:37:23.903475 NSNumberFormatterDemo[1454:400609] Formatted number string:一亿二千三百四十五万六千七百八十九