iOS NSNumberFormatter

最近需要格式化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:一亿二千三百四十五万六千七百八十九






















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值