- 浏览: 103684 次
- 性别:
- 来自: 昆明
文章分类
- 全部博客 (151)
- 120D02 (5)
- 直升机 (1)
- 我的技术资料收集 (82)
- 的技术资料收集 (4)
- .NET Solution (2)
- ASP.NET (1)
- Linq to sql (1)
- 数据库技术(MS SQL) (2)
- 架构/设计 (1)
- 敏捷/持续集成 (1)
- C#.NET开发 (1)
- Matlab开发 (1)
- WinForm开发 (1)
- 开源技术 (1)
- jQuery (1)
- 我的博文 (4)
- js (2)
- android (2)
- 9. 读书笔记 (1)
- CSS3 (1)
- HTML5 (1)
- JavaScript (5)
- 移动开发 (2)
- 编程心得 (1)
- Linux操作系统 (1)
- (BI)商业智能 (1)
- IOS (1)
- Windows Phone (2)
- C# API (1)
- JQuery系列 (1)
- TFS (1)
- C# (2)
- ExtJs (1)
- .NET (1)
- Nginx (1)
- WCF学习笔记 (1)
- Computer Graphic (1)
- IT产品 (1)
- 工具分享 (1)
- MySelf (1)
- C#专栏 (1)
- 管理 (1)
- 基于Oracle Logminer数据同步 (1)
- 日常 (1)
- 实用工具 (1)
- 网页设计 (1)
- avalon (1)
- flash (1)
- DDD (1)
- 01 技术Android (1)
- WCF (1)
- selenium (1)
最新评论
-
464410531:
三国杀。。。。。。。。。。。。。。。。。。。。。。。。。。。。 ...
实用的职场宝典:不提拔你,就因为你只想把工作做好
原帖地址:http://www.cnblogs.com/stephen-wang/p/3155958.html
金额转人民币大写是一种常见的要求,但是这一看似简单的要求,实现起来却并不容易。
前不久,我被问到了这样一道题,当时写了个算法,昨天晚上又和BJDP的人们讨论了一下,觉得很有必要把这个算法写下来。
总共36行,去掉空行还不到30行,就不多啰嗦解释了。
1 public class ChineseCurrencyConverter {
2
3 private static final String[] UNITS = {"亿","仟万","佰万","拾万","万","仟","佰","拾","" };
4 private static final String[] CHINESE_NUMBER = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
5
6 public static String convert(long yuan) {
7
8 if (yuan >= 1e9 || yuan < 0) {
9 return "这个数字超出解析范围了";
10 }
11 String amount = String.valueOf(yuan);
12 int len = amount.length();
13 int unitsLen = UNITS.length;
14
15 String chineseCurrency = "";
16 for (int i = len - 1; i >= 0; i--) {
17 chineseCurrency = number(amount.charAt(i)) + unit(amount.charAt(i), unitsLen - len + i) +chineseCurrency;
18 }
19
20 chineseCurrency = chineseCurrency.replaceAll("零+","零");
21 chineseCurrency = chineseCurrency + "元整";
22 chineseCurrency = chineseCurrency.replaceAll("零元","元");
23 return chineseCurrency;
24 }
25
26 private static String number(char number) {
27 return CHINESE_NUMBER[Integer.parseInt(String.valueOf(number))];
28 }
29
30 private static String unit(char number, int pos) {
31 if(number == '0') {
32 return "";
33 }
34 return UNITS[pos];
35 }
36 }
2
3 private static final String[] UNITS = {"亿","仟万","佰万","拾万","万","仟","佰","拾","" };
4 private static final String[] CHINESE_NUMBER = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
5
6 public static String convert(long yuan) {
7
8 if (yuan >= 1e9 || yuan < 0) {
9 return "这个数字超出解析范围了";
10 }
11 String amount = String.valueOf(yuan);
12 int len = amount.length();
13 int unitsLen = UNITS.length;
14
15 String chineseCurrency = "";
16 for (int i = len - 1; i >= 0; i--) {
17 chineseCurrency = number(amount.charAt(i)) + unit(amount.charAt(i), unitsLen - len + i) +chineseCurrency;
18 }
19
20 chineseCurrency = chineseCurrency.replaceAll("零+","零");
21 chineseCurrency = chineseCurrency + "元整";
22 chineseCurrency = chineseCurrency.replaceAll("零元","元");
23 return chineseCurrency;
24 }
25
26 private static String number(char number) {
27 return CHINESE_NUMBER[Integer.parseInt(String.valueOf(number))];
28 }
29
30 private static String unit(char number, int pos) {
31 if(number == '0') {
32 return "";
33 }
34 return UNITS[pos];
35 }
36 }
下面是一些用来测试的代码:
1 public class TestConverter {
2
3 public static void main(String[] args) {
4 System.out.println(ChineseCurrencyConverter.convert(100));
5 System.out.println(ChineseCurrencyConverter.convert(130));
6 System.out.println(ChineseCurrencyConverter.convert(102));
7 System.out.println(ChineseCurrencyConverter.convert(124));
8 System.out.println(ChineseCurrencyConverter.convert(1000));
9 System.out.println(ChineseCurrencyConverter.convert(10000));
10 System.out.println(ChineseCurrencyConverter.convert(100000));
11 System.out.println(ChineseCurrencyConverter.convert(1000000));
12 System.out.println(ChineseCurrencyConverter.convert(10000000));
13 System.out.println(ChineseCurrencyConverter.convert(10000000));
14 System.out.println(ChineseCurrencyConverter.convert(100000000));
15 System.out.println(ChineseCurrencyConverter.convert(1000000000));
16 System.out.println(ChineseCurrencyConverter.convert(1002));
17 System.out.println(ChineseCurrencyConverter.convert(1020));
18 System.out.println(ChineseCurrencyConverter.convert(1200));
19 System.out.println(ChineseCurrencyConverter.convert(10003));
20 System.out.println(ChineseCurrencyConverter.convert(10030));
21 System.out.println(ChineseCurrencyConverter.convert(10033));
22 System.out.println(ChineseCurrencyConverter.convert(10330));
23 System.out.println(ChineseCurrencyConverter.convert(13030));
24 System.out.println(ChineseCurrencyConverter.convert(100030));
25 System.out.println(ChineseCurrencyConverter.convert(100003));
26 System.out.println(ChineseCurrencyConverter.convert(100300));
27 System.out.println(ChineseCurrencyConverter.convert(103000));
28 System.out.println(ChineseCurrencyConverter.convert(100303));
29 System.out.println(ChineseCurrencyConverter.convert(1000004));
30 System.out.println(ChineseCurrencyConverter.convert(10000005));
31 System.out.println(ChineseCurrencyConverter.convert(10000006));
32 System.out.println(ChineseCurrencyConverter.convert(100000007));
33 System.out.println(ChineseCurrencyConverter.convert(1000000008));
34
35 }
36 }
2
3 public static void main(String[] args) {
4 System.out.println(ChineseCurrencyConverter.convert(100));
5 System.out.println(ChineseCurrencyConverter.convert(130));
6 System.out.println(ChineseCurrencyConverter.convert(102));
7 System.out.println(ChineseCurrencyConverter.convert(124));
8 System.out.println(ChineseCurrencyConverter.convert(1000));
9 System.out.println(ChineseCurrencyConverter.convert(10000));
10 System.out.println(ChineseCurrencyConverter.convert(100000));
11 System.out.println(ChineseCurrencyConverter.convert(1000000));
12 System.out.println(ChineseCurrencyConverter.convert(10000000));
13 System.out.println(ChineseCurrencyConverter.convert(10000000));
14 System.out.println(ChineseCurrencyConverter.convert(100000000));
15 System.out.println(ChineseCurrencyConverter.convert(1000000000));
16 System.out.println(ChineseCurrencyConverter.convert(1002));
17 System.out.println(ChineseCurrencyConverter.convert(1020));
18 System.out.println(ChineseCurrencyConverter.convert(1200));
19 System.out.println(ChineseCurrencyConverter.convert(10003));
20 System.out.println(ChineseCurrencyConverter.convert(10030));
21 System.out.println(ChineseCurrencyConverter.convert(10033));
22 System.out.println(ChineseCurrencyConverter.convert(10330));
23 System.out.println(ChineseCurrencyConverter.convert(13030));
24 System.out.println(ChineseCurrencyConverter.convert(100030));
25 System.out.println(ChineseCurrencyConverter.convert(100003));
26 System.out.println(ChineseCurrencyConverter.convert(100300));
27 System.out.println(ChineseCurrencyConverter.convert(103000));
28 System.out.println(ChineseCurrencyConverter.convert(100303));
29 System.out.println(ChineseCurrencyConverter.convert(1000004));
30 System.out.println(ChineseCurrencyConverter.convert(10000005));
31 System.out.println(ChineseCurrencyConverter.convert(10000006));
32 System.out.println(ChineseCurrencyConverter.convert(100000007));
33 System.out.println(ChineseCurrencyConverter.convert(1000000008));
34
35 }
36 }
这些数字测试的结果还都正确。
这里没有处理角和分,留给有想法的同学去尝试一下吧。
本文链接:http://www.cnblogs.com/stephen-wang/p/3155958.html,转载请注明。
发表评论
-
Javascript:猜猜弹出的是啥?为啥? - 幸福框架
2013-06-28 13:33 393原帖地址:http://www.cnblogs.com/hap ... -
C#中WindowsForm常见控件的运用 -- - 李晓峰
2013-06-28 13:27 1665原帖地址:http://www.cnblogs.com/liy ... -
海量数据处理利器之Hash——在线邮件地址过滤 - MyDetail
2013-06-27 12:00 601原帖地址:http://www.cnblo ... -
ASP.NET MVC 4 for Visual Studio 2010 下载地址 - 张鸿伟
2013-06-27 11:48 711原帖地址:http://www.cnblogs.com/wei ... -
【ASP.NET Web API教程】6.2 ASP.NET Web API中的JSON和XML序列化 - r01cn
2013-06-26 11:00 870原帖地址:http://www.cnblogs.com/r01 ... -
[珠玑之椟]估算的应用与Little定律 - 五岳
2013-06-26 10:54 585原帖地址:http://www.cnblogs.com/wuy ... -
从银行的钱荒看一个公司的团队建设 产品线过多最终导致最赚钱的项目面临破产 - James Li
2013-06-26 10:36 594原帖地址:http://www.cnblogs.com/Jam ... -
Windows 8 动手实验系列教程 实验6:设置和首选项 - zigzagPath
2013-06-25 13:39 490原帖地址:http://www.cnblogs.com/zig ... -
闲聊可穿戴设备 - shawn.xie
2013-06-25 13:33 578原帖地址:http://www.cnblo ... -
如何使用开源库,吐在VS2013发布之前,顺便介绍下VS2013的新特性"Bootstrap" - 量子计算机
2013-06-25 13:27 830原帖地址:http://www.cnblogs.com/DSh ... -
一步一步将自己的代码转换为观察者模式 - 文酱
2013-06-23 11:36 568原帖地址:http://www.cnblo ... -
iOS内存错误EXC_BAD_ACCESS的解决方法(message sent to deallocated instance) - VicStudio
2013-06-23 11:30 501原帖地址:http://www.cnblogs.com/vic ... -
记录asp.net在IE10下事件丢失排错经过 - Adming
2013-06-23 11:24 661原帖地址:http://www.cnblogs.com/wea ... -
记 FineUI 官方论坛所遭受的一次真实网络攻击!做一个像 ice 有道德的黑客! - 三生石上
2013-06-23 11:18 752原帖地址:http://www.cnblogs.com/san ... -
3、使用Oracle Logminer同步Demo
2013-06-19 10:33 534原帖地址:http://www.cnblogs.com/shi ... -
算法实践——数独的基本解法
2013-06-19 10:27 1393原帖地址:http://www.cnblogs.com/gre ... -
简单实现TCP下的大文件高效传输
2013-06-19 10:21 650原帖地址:http://www.cnblogs.com/sma ... -
avalon - 初步接触
2013-06-18 10:06 751原帖地址:http://www.cnblogs.com/aar ... -
Nginx学习笔记(一) Nginx架构
2013-06-18 09:59 493原帖地址:http://www.cnblogs.com/cod ... -
证书打印《二》
2013-06-17 10:47 492原帖地址:http://www.cnblogs.com/bin ...
相关推荐
22231-030107-W0501.附件 3-b6-demo-人民币大写-键盘输入.exe
金额到大写-易语言.zip
注: PREFIX要大写 7: 复制配置文件 cp redis.conf /usr/local/redis 注path为解压后的安装包路径 /root/gsj/redis-3.0.6 8: 让redis以后台进程的形式运行 vim /usr/local/redis/redis.conf 编辑redis.conf配置...
人民币大写规范-3页.pdf
人民币大写规范-1页.pdf
汉字转换拼音的工具包,Pinyin.toPinyin('') 1、生成的拼音不包含声调和方言,均为大写; 2、支持自定义词典; 3、执行效率很高(Pinyin4J 的 4~16 倍); 4、很低的内存占用(不添加词典时小于 30KB)
Java 实例 - 字符串小写转大写源代码-详细教程.zip
通过js代码将小写金额转换成大写金额,将大写金额转换成数字
将数字金额转成人民币大写,如1999.00,转为:壹仟玖佰玖拾玖元整;2000.00,转为:贰仟元整;2000.01,转为:贰仟元零壹分
本文实例为大家分享了python实现人民币大写转换的具体代码,供大家参考,具体内容如下 #!/usr/bin/python # -*- coding:utf-8 -*- # ********* 转换方法介绍 ********* # 将需要转换的数字从右向左,每4位分成一个...
亲测可用,找了好久的资源,需要的可以下载 下载好安装包后,为了方便,可以将pip-20.0.2的安装包解压后放在python库的script下,默认地址:C:\Users\...验证pip版本,在命令窗口运行语句(注意V大写):pip -V
人民币大写金额的规范.pdf
金额小写转大写_sql函数
《JavaScript无限位小写金额转换大写金额》说明:1.本程序用JavaScript语言编写。转换方法严格遵照中国人民银行规定的银行支票中关于中文大写填写规范的相关规定(见下面附文),两可之处按简便方法处理。2.输入小写...
转换大写: 把一个文件的内容全部转换为大写. 12-19. 转换小写: 将当前目录下的所有文全部转换为小写. 12-20. Du: DOS 到 UNIX 文本文件的转换. 12-21. rot13: rot13, 弱智加密. 12-22. Generating "Crypto-Quote" ...
小写数字金额转人民币大写公式.pdf
将数字形式的人民币金额转换成大写形式的人民币金额。。。
网上很多数字金额转人民币大写的代码也很好用,但是一直没有看到中文大写金额转数字的算法,这个是我自己敲的,也运行了单元测试,应该可用的,大家拿起看看吧,有问题欢迎留言!