iOS NSNumberFormatter的使用

- (void)setLabelWithMoney:(NSString *)money numberStyle:(NSNumberFormatterStyle)numberStyle decimalNumber:(NSString *)decimalNumber word:(NSString *)word
{
    if (numberStyle == NSNumberFormatterDecimalStyle) {
        NSString *moneyStr = [NSString stringWithFormat:@"%@",money];
        if (decimalNumber == nil || [decimalNumber isEqualToString:@""]) {
        }
        else
        {
            for (int i = 0; i < money.length; i++) {
                NSString *c = [money substringWithRange:NSMakeRange(i, 1)];
                if ([c isEqualToString:@"."]) {
                    moneyStr = [moneyStr substringToIndex:(i + [decimalNumber intValue] + 1)];
                }
            }
        }
        double moneyNum = [moneyStr doubleValue];
        NSNumberFormatter *formatter = [[NSNumberFormatter alloc]init];
        formatter.numberStyle = numberStyle;
        money = [formatter stringFromNumber:[NSNumber numberWithDouble:moneyNum]];
        if (word == nil || [word isEqualToString:@""]) {
            self.text = money;
        }
        else
        {
            self.text = [NSString stringWithFormat:@"%@%@",money,word];
        }

    }
    else if (numberStyle == NSNumberFormatterNoStyle)
    {
        NSString *moneyStr1 = [[NSString alloc]init];
        NSString *moneyStr2 = [[NSString alloc]init];
        if (decimalNumber == nil || [decimalNumber isEqualToString:@""]){
            for (int i = 0; i < money.length; i++) {
                NSString *c = [money substringWithRange:NSMakeRange(i, 1)];
                if ([c isEqualToString:@"."]) {
                    moneyStr1 = [money substringToIndex:i];
                    moneyStr2 = [money substringFromIndex:i];
                }
            }
        }
        else
        {
            for (int i = 0; i < money.length; i++) {
                NSString *c = [money substringWithRange:NSMakeRange(i, 1)];
                if ([c isEqualToString:@"."]) {
                    moneyStr1 = [money substringToIndex:i];
                    moneyStr2 = [money substringWithRange:NSMakeRange(i, [decimalNumber intValue]+1)];
                }
            }
        }

        NSLog(@"%@  %@",moneyStr1,moneyStr2);
        int moneyNum = [moneyStr1 intValue];
        NSNumberFormatter *formatter = [[NSNumberFormatter alloc]init];
        formatter.numberStyle = numberStyle;
        moneyStr1 = [formatter stringFromNumber:[NSNumber numberWithInt:moneyNum]];
        if (word == nil || [word isEqualToString:@""]) {
            self.text = [NSString stringWithFormat:@"%@%@",moneyStr1,moneyStr2];
        }
        else
        {
            self.text = [NSString stringWithFormat:@"%@%@",[NSString stringWithFormat:@"%@%@",moneyStr1,moneyStr2],word];
        }

        

    }
}
使用实例:

CustomNumberLabel *number = [[CustomNumberLabel alloc]initWithFrame:CGRectMake(0, 300, kScreenW, 20)];
    [number setLabelWithMoney:@"123456789.123" numberStyle:(NSNumberFormatterNoStyle) decimalNumber:@"2" word:@"元"];;
    [self.view addSubview:number];

其中 numberStyle就是NSNumberFormatter的numberStyle属性,一般只用no和decimal,下面有详细介绍。

decimalNumber是保留几位小数,word是加到后面的数字“元”?


通过NSNumberFormatter,可以设置NSNumber输出的格式。例如如下代码:

        NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];

        formatter.numberStyle = NSNumberFormatterDecimalStyle;

        NSString *string = [formatter stringFromNumber:[NSNumber numberWithInt:123456789]];

        NSLog(@"Formatted number string:%@",string);

        输出结果为:[1223:403] Formatted number string:123,456,789

其中NSNumberFormatter类有个属性numberStyle,它是一个枚举型,设置不同的值可以输出不同的数字格式。该枚举包括:

 

enum {

    NSNumberFormatterNoStyle = kCFNumberFormatterNoStyle,

    NSNumberFormatterDecimalStyle = kCFNumberFormatterDecimalStyle,

    NSNumberFormatterCurrencyStyle = kCFNumberFormatterCurrencyStyle,

    NSNumberFormatterPercentStyle = kCFNumberFormatterPercentStyle,

    NSNumberFormatterScientificStyle = kCFNumberFormatterScientificStyle,

    NSNumberFormatterSpellOutStyle = kCFNumberFormatterSpellOutStyle

y    

    NSNumberFormatterRoundCeiling = kCFNumberFormatterRoundCeiling,//四舍五入,原值2.7999999999,直接输出3 

    NSNumberFormatterRoundFloor = kCFNumberFormatterRoundFloor,//保留小数输出2.8 正是想要的

    NSNumberFormatterRoundDown = kCFNumberFormatterRoundDown,//加上了人民币标志,原值输出¥2.8

    NSNumberFormatterRoundUp = kCFNumberFormatterRoundUp,//本身数值乘以100后用百分号表示,输出280%

    NSNumberFormatterRoundHalfEven = kCFNumberFormatterRoundHalfEven,//原值表示,输出2.799999999E0

    NSNumberFormatterRoundHalfDown = kCFNumberFormatterRoundHalfDown,//原值的中文表示,输出二点七九九九。。。。

    NSNumberFormatterRoundHalfUp = kCFNumberFormatterRoundHalfUp //原值中文表示,输出第三



};

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:一亿二千三百四十五万六千七百八十九

其中第三项和最后一项的输出会根据系统设置的语言区域的不同而不同

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值