一.目的

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-金额小写转大写的更多相关文章

  1. js helper(hsv/hsb转rgb颜色,uuid,金额小写转大写)

    hsv/hsb转rgb颜色 //h:[0,360],s:[0,100],v:[0,100] //return r:[0,256], g:[0,256],b:[0,256] function hsvto ...

  2. JS函数实现金额小写转大写

    ///<summery>小写金额转化大写金额</summery> function AmountLtoU(amount) { if (isNaN(amount) || amou ...

  3. js 金额小写转换为大写

    <script> jQuery(document).ready(function () { //当金额文本框失去焦点时,自动将数字转化为大写填充到 大写的文本框中 $("#Amo ...

  4. Python TIPS上一道关于人民币金额小写转大写的题

    人民币金额打印 题目链接:here.我发现我写的好复杂,但万幸编码还算符合人类,看了其他答案,感觉都是天书. #!/usr/bin/env python # -*- coding: utf-8 -*- ...

  5. orcl数据库自定义函数--金额小写转大写

    很多时候在打印票据的时候需要用到大写,ireport无法转换,只能先在查询语句里面进行转换,首先定义好函数,之后再调用函数 CREATE OR REPLACE Function MoneyToChin ...

  6. js实现金额小写转大写

    function convertCurrency(currencyDigits) { var MAXIMUM_NUMBER = 1000000000000.00; var CN_ZERO = &quo ...

  7. js转换人民币金额 小写到大写

    u.bigNum=function(n) { var fraction = ['角', '分']; var digit = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒 ...

  8. ABAP-金额小写转大写

    FUNCTION ZSDI0007_CH_LOWERTOUPPER. *"---------------------------------------------------------- ...

  9. C#小写数字金额转换成大写人民币金额的算法

    C#小写数字金额转换成大写人民币金额的算法 第一种方法: using System.Text.RegularExpressions;//首先引入命名空间 private string DaXie(st ...

  10. SQL函数:小写金额转换成大写

    /********************************************************作者:版本:1.0创建时间:20020227修改时间:功能:小写金额转换成大写参数:n ...

随机推荐

  1. PlaceholderImageView

    PlaceholderImageView 说明 1. PlaceHolderImageView基于SDWebImage编写 2. 给定一个图片的urlString,以及一个placeholderIma ...

  2. (转)阴影锥(Shadow Volume)

    转自:http://blog.csdn.net/zjull/article/details/11819923 Shadow Map和Shadow Volume是当今比较流行的实时阴影渲染方法,跟Sha ...

  3. windows 隐藏文件方法

    隐藏: 然后在里面输入:attrib +s +a +h +r f:\123 (f的意思就是F盘,123就是你新建的文件夹名字),然后按回车,你会发现F盘下的123文件夹不见的,其实就是被你隐藏了. 文 ...

  4. 转:简单的RTSP消息交互过程

    简单的RTSP消息交互过程 C表示RTSP客户端,S表示RTSP服务端 1.   第一步:查询服务器端可用方法 1.C->S:OPTION request       //询问S有哪些方法可用 ...

  5. Android Multiple Screens Android 屏幕适配的一些总结

    作为一名Android应用开发程序猿,最痛苦的事莫过于在屏幕适配了,这与历史原因有关,具体就不深究了. 直到最近才搞明白dpi是怎么换算的,在开发的过程中,一个应用运行的屏幕标准应该是分辨率为320x ...

  6. Java程序员转Android开发必读经验分享

    小编最近几日偷偷的发现部分Java程序员想转安卓开发,故此加紧补充知识,为大家搜集资料,积极整理前人的经验,希望可以给正处于困惑中的你,带来些许的帮助. 啰哩啰嗦的说说Java和Android程序的区 ...

  7. qt下调用win32api 修改分辨率

    在头文件中添加 #include <window.h> DEVMODE DevMode; EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, ...

  8. 【C#|.NET】从细节出发(三) 逻辑层事务和page object模式

    一. 业务逻辑层的事务问题 如果你的程序分层清晰并且系统禁用复杂存储过程,那么在DA中的职责比较单一.程序的逻辑通过BLL调用各种不同模块的DA来实现数据操作.如果当需要不同模块在一个事务的时候,问题 ...

  9. 804 pretest 解题

    Answers with Explanations 1. c) s1 and s2 not equal s1 and s3 equal JVM sets a constant pool in whic ...

  10. SAP的吐槽来源

    这几天看了 梅林传奇(英国剧) , 封面是 梅林传奇的男主 对着女主 一脸无语的玩着电脑. 原来 看梅林传奇的时候,以为自己看错了,没有理会到这部剧的真谛,是自己不懂得和发现美,为了滚娘从第二季就弃了 ...