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
iOS-金额小写转大写的更多相关文章
- 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 ...
- JS函数实现金额小写转大写
///<summery>小写金额转化大写金额</summery> function AmountLtoU(amount) { if (isNaN(amount) || amou ...
- js 金额小写转换为大写
<script> jQuery(document).ready(function () { //当金额文本框失去焦点时,自动将数字转化为大写填充到 大写的文本框中 $("#Amo ...
- Python TIPS上一道关于人民币金额小写转大写的题
人民币金额打印 题目链接:here.我发现我写的好复杂,但万幸编码还算符合人类,看了其他答案,感觉都是天书. #!/usr/bin/env python # -*- coding: utf-8 -*- ...
- orcl数据库自定义函数--金额小写转大写
很多时候在打印票据的时候需要用到大写,ireport无法转换,只能先在查询语句里面进行转换,首先定义好函数,之后再调用函数 CREATE OR REPLACE Function MoneyToChin ...
- js实现金额小写转大写
function convertCurrency(currencyDigits) { var MAXIMUM_NUMBER = 1000000000000.00; var CN_ZERO = &quo ...
- js转换人民币金额 小写到大写
u.bigNum=function(n) { var fraction = ['角', '分']; var digit = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒 ...
- ABAP-金额小写转大写
FUNCTION ZSDI0007_CH_LOWERTOUPPER. *"---------------------------------------------------------- ...
- C#小写数字金额转换成大写人民币金额的算法
C#小写数字金额转换成大写人民币金额的算法 第一种方法: using System.Text.RegularExpressions;//首先引入命名空间 private string DaXie(st ...
- SQL函数:小写金额转换成大写
/********************************************************作者:版本:1.0创建时间:20020227修改时间:功能:小写金额转换成大写参数:n ...
随机推荐
- 转:ffdshow 源代码分析
ffdshow神奇的功能:视频播放时显示运动矢量和QP FFDShow可以称得上是全能的解码.编码器.最初FFDShow只是mpeg视频解码器,不过现在他能做到的远不止于此.它能够解码的视频格式已经远 ...
- Log4j2常见使用示例及Syslog/Syslog-ng
准备工作 打开http://logging.apache.org/log4j/,点击左侧Download,我下载的是Apache Log4j 2 binary (zip),目前是2.0.2版本.解压后 ...
- Swift入门篇-基本类型(2)
现在我也在学习Swift语言,常常去逛很多苹果社区和论坛,看到了圈子很多奇怪的现象,发现很多人都赶忙去翻译 Swift书籍 和 发布Swift的视频 .他们这种对新知识的探索精神我本人是很佩服的.但是 ...
- 旧手机作为USB无线网卡使用(分享WIFI、蓝牙连接)
首先开启手机的WIFI或者蓝牙功能,建立访问互联网的连接,然后设置-更多-网络共享与便携热点,打开安卓手机USB网络共享功能,即可在计算机上通过手机(无电话卡.数据卡)访问互联网.而且此时手机一直在充 ...
- 使用Gradle自动发布Java Web到SAE
博客已迁移,请访问:http://www.huangyunkun.com/ 现在像SAE这类的应用引擎已经比较多了,百度和腾讯都出了这样的东西. 我很早的时候就开始用SAE,当时还为了迁就SAE学习了 ...
- Code First 中使用 ForeignKey指定外键时总是显示未引用
Code First 中使用 ForeignKey指定外键时总是显示未引用 原因是:开发环境是在.NET 4.0 修改项目,改为.net 4.5
- asp.net中TreeView的大数据加载速度优化
由于数据量太大,加载树时间很长,所以进行了优化 前台 .aspx <asp:Panel ID="Panel2" runat="server" Height ...
- 【LeetCode】257. Binary Tree Paths
Binary Tree Paths Given a binary tree, return all root-to-leaf paths. For example, given the followi ...
- Java Split以竖线作为分隔符
今天用到了Java中的Split函数,要以“|”作为分割符,当输入竖线时,发现出错,这个问题应该很久前就遇到过,不过太长时间就给忘了! 网上一搜,就找到了答案,这是因为split里面有两个参数,其中一 ...
- Azure SoftEther VPN
装个vs2015,想装全组建还得爬墙… 曾经的 Azure OpenVPN 项目 (http://azure-openvpn.github.io/) 好几年木有更新 改用 SoftEther VPN ...