首页 > 移动平台 > 详细

iOS-金额小写转大写

时间:2016-04-20 19:40:25      阅读:264      评论:0      收藏:0      [点我收藏+]

一.目的

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

iOS-金额小写转大写

原文:http://www.cnblogs.com/mancong/p/5413753.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!