IOS 人民币数值大小写转换代码

网上方法查找过,可是总不准确,现在根据jave算法改编成OC算法,和大家分享


-(NSString *)changetochinese:(NSString *)numstr

{

    double numberals=[numstr doubleValue];

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

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

    NSArray *unitname = @[@"", @"", @"亿", @"万亿"];

    //金额乘以100转换成字符串(去除圆角分数值)

    NSString *valstr=[NSString stringWithFormat:@"%.2f",numberals];

    NSString *prefix;

    NSString *suffix;

    if (valstr.length<=2) {

        prefix=@"零元";

        if (valstr.length==0) {

            suffix=@"零角零分";

        }

        else if (valstr.length==1)

        {

            suffix=[NSString stringWithFormat:@"%@",[numberchar objectAtIndex:[valstr intValue]]];

        }

        else

        {

            NSString *head=[valstr substringToIndex:1];

            NSString *foot=[valstr substringFromIndex:1];

            suffix=[NSString stringWithFormat:@"%@%@",[numberchar objectAtIndex:[head intValue]],[numberchar objectAtIndex:[foot intValue]]];

        }

    }

    else

    {

        prefix=@"";

        suffix=@"";

        int flag=valstr.length-2;

        NSString *head=[valstr substringToIndex:flag-1];

        NSString *foot=[valstr substringFromIndex:flag];

        if (head.length>13) {

            return @"数值太大(最大支持13位整数),无法处理";

        }

        //处理整数部分

         NSMutableArray *ch=[[NSMutableArray alloc]init];

        for (int i = 0; i < head.length; i++) {

            NSString * str=[NSString stringWithFormat:@"%x",[head characterAtIndex:i]-'0'];

            [ch addObject:str];

        }

        int zeronum=0;

        

        for (int i=0; i<ch.count; i++) {

            int index=(ch.count -i-1)%4;//取段内位置

            int indexloc=(ch.count -i-1)/4;//取段位置

            if ([[ch objectAtIndex:i]isEqualToString:@"0"]) {

                zeronum++;

            }

            else

            {

                if (zeronum!=0) {

                    if (index!=3) {

                        prefix=[prefix stringByAppendingString:@""];

                    }

                    zeronum=0;

                }

                prefix=[prefix stringByAppendingString:[numberchar objectAtIndex:[[ch objectAtIndex:i]intValue]]];

                prefix=[prefix stringByAppendingString:[inunitchar objectAtIndex:index]];

            }

            if (index ==0 && zeronum<4) {

                prefix=[prefix stringByAppendingString:[unitname objectAtIndex:indexloc]];

            }

        }

        prefix =[prefix stringByAppendingString:@""];

        //处理小数位

        if ([foot isEqualToString:@"00"]) {

            suffix =[suffix stringByAppendingString:@""];

        }

        else if ([foot hasPrefix:@"0"])

        {

            NSString *footch=[NSString stringWithFormat:@"%x",[foot characterAtIndex:1]-'0'];

            suffix=[NSString stringWithFormat:@"%@",[numberchar objectAtIndex:[footch intValue] ]];

        }

        else

        {

            NSString *headch=[NSString stringWithFormat:@"%x",[foot characterAtIndex:0]-'0'];

            NSString *footch=[NSString stringWithFormat:@"%x",[foot characterAtIndex:1]-'0'];

            suffix=[NSString stringWithFormat:@"%@%@",[numberchar objectAtIndex:[headch intValue]],[numberchar objectAtIndex:[footch intValue]]];

        }

    }

    return [prefix stringByAppendingString:suffix];

}


此方法参考网友binbinxyz的文章关于数字转换成人民币大写的问题地址
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值