zoukankan      html  css  js  c++  java
  • iOS-金额小写转大写

    一.目的

    1. 金额小写转化成大写. 如 123456.65 --> 壹拾贰万叁仟肆佰伍拾陆元陆角伍分

    2. 只能处理13位数的金额,并且只能处理到小数点后两位.

    二.代码

     #import "ViewController.h"

    #define ScreenWidth [UIScreen mainScreen].bounds.size.width

    #define ScreenHeight [UIScreen mainScreen].bounds.size.height

    @interface ViewController ()

    @property (nonatomic, strong) UILabel   * smallLabel;  //显示小写金额

    @property (nonatomic, strong) UILabel   * bigLabel;     //显示大写金额

    @end

    @implementation ViewController

    - (void)viewDidLoad

    {

        [super viewDidLoad];

        [self initUI];

    }

    - (void)initUI

    {

        NSString * money = @"123456.65";

        

        self.smallLabel = [[UILabel alloc] init];

        self.smallLabel.frame = CGRectMake(10, 30, ScreenWidth - 20, 40);

        self.smallLabel.text = money;

        self.smallLabel.textAlignment = NSTextAlignmentCenter;

        [self.view addSubview:self.smallLabel];

        

        //大写

        self.bigLabel = [[UILabel alloc] init];

        self.bigLabel.frame = CGRectMake(10, 100, ScreenWidth - 20, 40);

        self.bigLabel.text = [self changetoBigMoney:money];

        self.bigLabel.textAlignment = NSTextAlignmentCenter;

        [self.view addSubview:self.bigLabel];

    }

    //可以直接拷贝该封装的方法 

    #pragma mark 金币大小写 --> 封装的方法

    - (NSString *)changetoBigMoney:(NSString *)numstr

    {

        //转化成double类型

        double numberals = [numstr doubleValue];

        

        NSArray *numberchar = @[@"零",@"壹",@"贰",@"叁",@"肆",@"伍",@"陆",@"柒",@"捌",@"玖"];

        NSArray *inunitchar = @[@"",@"拾",@"佰",@"仟"];

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

        

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

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

        NSLog(@"valstr: %@",valstr);

        

        NSString *prefix;

        NSString *suffix;

        

        NSLog(@"%lu",(unsigned long)valstr.length);

        

        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 = (int)valstr.length - 2;

            NSLog(@"flag: %d",flag);

            

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

            NSLog(@"head: %@",head);

            

            NSString *foot = [valstr substringFromIndex:flag];

            NSLog(@"foot: %@",foot);

            

            if (head.length>13)

            {

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

            }

            //处理整数部分

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

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

            {

                NSLog(@"head[i]: %hu",[head characterAtIndex:i]);

                

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

                [ch addObject:str];

                

                NSLog(@"ch: %@",ch);

            }

            NSLog(@"ch_All: %@",ch);

            

            int zeronum = 0;

            

            NSLog(@"ch.count: %ld",ch.count);

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

            {

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

                NSLog(@"index: %d",index);

                

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

                NSLog(@"indexloc: %d",indexloc);

                

                

                NSLog(@"ch[i]: %@",[ch objectAtIndex:i]);

                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];

    }

    @end

    你的一次推荐就是对我莫大的支持。感觉不错,给个推荐或者评论吧。
  • 相关阅读:
    java中怎么跳出两层for循环
    卡斯特信号有限公司面经
    唯一索引、普通索引、主键索引的区别
    ES中的查询操作
    sql:union 与union的使用和区别
    Java中多个集合的交集,并集和差集
    Angular动态组件
    Angular惰性加载的特性模块
    spring定时器
    索引
  • 原文地址:https://www.cnblogs.com/mancong/p/5413753.html
Copyright © 2011-2022 走看看