人民币数字转大写

- (NSString *)rmbUppercase{

    if (self.length == 0) {

        return @"";

    }

    NSString *operateString = [self copy];

    

    NSString *retString = @"";

    

    if ([self containsString:@"."]) {

        if ([operateString componentsSeparatedByString:@"."][1].length > 2) {

            //小数点后超出

            NSRange dotRange = [self rangeOfString:@"."];

            operateString = [self substringToIndex:dotRange.location + 3];

        }

        //小数部分

        NSRange operateStringDotRange = [operateString rangeOfString:@"."];

        if (operateStringDotRange.location == operateString.length - 3) {

            //角和分都有

            NSString *fen = [operateString substringWithRange:NSMakeRange(operateStringDotRange.location + 2, 1)];

            NSString *jiao = [operateString substringWithRange:NSMakeRange(operateStringDotRange.location + 1, 1)];

            if ([fen integerValue] > 0) {

                retString = [NSString stringWithFormat:@"%@",[self uppercaseNumber:[fen integerValue]]];

                retString = [NSString stringWithFormat:@"%@%@%@",[self uppercaseNumber:[jiao integerValue]],[jiao integerValue] > 0?@"":@"",retString];

            }else{

                if ([jiao integerValue] > 0) {

                    retString = [NSString stringWithFormat:@"%@",[self uppercaseNumber:[jiao integerValue]]];

                }

            }

        }else if (operateStringDotRange.location == operateString.length - 2){

            //只有角

            NSString *jiao = [operateString substringWithRange:NSMakeRange(operateStringDotRange.location + 1, 1)];

            if ([jiao integerValue] > 0) {

                retString = [NSString stringWithFormat:@"%@",[self uppercaseNumber:[jiao integerValue]]];

            }

        }

        //小数部分处理完毕,开始处理整数部分

        operateString = [self componentsSeparatedByString:@"."][0];

    }

    

    //整数部分>0时要有圆,整数部分和小数部分均为0时也要有圆

    if ([operateString integerValue] > 0 || retString.length <= 1) {

        retString = [NSString stringWithFormat:@"%@",retString];

    }

    

    NSArray *sectionNames   = @[@"",@"",@"亿"];

    NSArray *charNames      = @[@"",@"",@"",@""];

    

    NSMutableArray *bigSectionStrings = [NSMutableArray array];

    //大格位处理--倒序截出大格位

    NSString *bigTempString = nil;

    for (NSInteger i = 0; i < operateString.length; i ++) {

        NSString *bigIndexChar = [operateString substringWithRange:NSMakeRange(operateString.length - 1 - i, 1)];

        if (bigTempString.length < 8) {

            bigTempString = [NSString stringWithFormat:@"%@%@",bigIndexChar,bigTempString.length > 0?bigTempString:@""];

        }

        //截出大格位

        if (i == operateString.length - 1 || i%8 == 7) {

            [bigSectionStrings insertObject:bigTempString atIndex:0];

            bigTempString = nil;

        }

    }

    

    

    NSString *bigPrefixString = @"";

    //将各大格位数字变成大写,然后衔接

    for (NSInteger k = 0; k < bigSectionStrings.count; k ++) {

        NSString *bigSectionString = bigSectionStrings[k];

        NSString *retPrefixString = @"";

        //格位处理---倒序截出格位

        NSMutableArray *sectionStrings = [NSMutableArray array];

        NSString *tempString = @"";

        for (NSInteger i = 0; i < bigSectionString.length; i ++) {

            NSString *indexChar = [bigSectionString substringWithRange:NSMakeRange(bigSectionString.length - 1 - i, 1)];

            

            //拼接字符串

            if (tempString.length < 4) {

                tempString = [NSString stringWithFormat:@"%@%@",indexChar,tempString.length > 0?tempString:@""];

            }

            

            //截出格位

            if (i == bigSectionString.length - 1 || i%4 == 3){

                [sectionStrings insertObject:tempString atIndex:0];

                tempString = nil;

            }

        }

        

        

        //将各格位数字变成大写,然后衔接

        for (NSInteger i = 0; i < sectionStrings.count; i ++) {

            NSString *sectionString = sectionStrings[i];

            

            

            NSString *upperSectionString = @"";

            for (NSInteger j = 0; j < sectionString.length; j ++) {

                NSString *indexChar = [sectionString substringWithRange:NSMakeRange(j, 1)];

                

                if ([indexChar integerValue] > 0) {

                    NSString *tailString = [NSString stringWithFormat:@"%@%@",[self uppercaseNumber:[indexChar integerValue]],charNames[sectionString.length - 1 - j]];

                    upperSectionString = [upperSectionString stringByAppendingString:tailString];

                }else if (![upperSectionString hasSuffix:@""]){

                    upperSectionString = [upperSectionString stringByAppendingString:@""];

                }

            }

            //如果格位整理后的数据以结尾而且不等于,则去掉尾零

            if (upperSectionString.length > 1 && [upperSectionString hasSuffix:@""]) {

                upperSectionString = [upperSectionString substringToIndex:upperSectionString.length - 1];

            }

            //补充格位尾单位   万/亿/兆...

            if (![upperSectionString isEqualToString:@""]) {

                if (sectionStrings.count - 1 - i < sectionNames.count) {

                    //该条件判断其实是多余的

                    upperSectionString = [upperSectionString stringByAppendingString:sectionNames[sectionStrings.count - 1 - i]];

                }

            }

            //已经获得格位大写字符,开始衔接各个格位

            if ([upperSectionString hasPrefix:@""] && [retPrefixString hasSuffix:@""]) {

                upperSectionString = [upperSectionString substringFromIndex:1];

            }

            retPrefixString = [retPrefixString stringByAppendingString:upperSectionString];

        }

        //大格位衔接

        if (retPrefixString.length > 1 && [retPrefixString hasSuffix:@""]) {

            retPrefixString = [retPrefixString substringToIndex:retPrefixString.length - 1];

        }

        //补充大格位单位:亿

        if (k < bigSectionStrings.count - 1) {// && ![retPrefixString isEqualToString:@""]

            retPrefixString = [retPrefixString stringByAppendingString:@"亿"];

        }

        //已经获得大格位大写字符,开始衔接各个大格位

        if ([retPrefixString isEqualToString:@"零亿"]) {

            retPrefixString = [retPrefixString substringFromIndex:1];

            bigPrefixString = [bigPrefixString stringByAppendingString:retPrefixString];

        }else{

            bigPrefixString = [bigPrefixString stringByAppendingString:retPrefixString];

        }

    }

    

    

    //整数部分前的零去掉

    if ([bigPrefixString hasSuffix:@""] && bigPrefixString.length > 0) {

        bigPrefixString = [bigPrefixString substringToIndex:bigPrefixString.length - 1];

    }

    //整数部分头部的零去掉

    if ([bigPrefixString hasPrefix:@""] && bigPrefixString.length > 0) {

        bigPrefixString = [bigPrefixString substringFromIndex:1];

    }

    //和小数部分整合

    retString = [bigPrefixString stringByAppendingString:retString];

    

    //当整数部分无生成字段

    if ([retString hasPrefix:@""]) {

        retString = [NSString stringWithFormat:@"%@",retString];

    }

    

    if ([retString hasPrefix:@""] && ![retString hasPrefix:@"零圆"]) {

        retString = [retString substringFromIndex:1];

    }

    

    return retString;

}


- (NSString *)uppercaseNumber:(NSInteger)number{

    switch (number) {

        case 0:return @"";

        case 1:return @"";

        case 2:return @"";

        case 3:return @"";

        case 4:return @"";

        case 5:return @"";

        case 6:return @"";

        case 7:return @"";

        case 8:return @"";

        case 9:return @"";

        default:return nil;

            break;

    }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值