import java.util.ArrayList;
import java.util.List;
public class Demo {
private char ZERO = '0';
private char ZERO_CN = '零';
private String[] NUMBER = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
private String[] UNIT = { "", "拾", "佰", "仟" };
private String[] MATRIX = { "", "万", "億", "兆", "吉", "太", "拍", "艾", "泽", "尧" };
public String change(long num) {
if (num < 0) {
return "";
}
List<String> data = new ArrayList<String>();
format(String.valueOf(num), data);
return show(data);
}
public void format(String str, List<String> data) {
int len = str.length();
if (len == 1) {
data.add(NUMBER[str.charAt(0) - ZERO]);
return;
}
if (len > 4) {
format(str.substring(str.length() - 4), data);
format(str.substring(0, str.length() - 4), data);
return;
}
formatUnit(str, data);
}
private void formatUnit(String str, List<String> data) {
String result = "";
while (str.length() > 0 && Long.parseLong(str) > 0) {
if (str.charAt(0) == ZERO) {
result += NUMBER[str.charAt(0) - ZERO];
str = String.valueOf(Long.parseLong(str));
continue;
}
result += NUMBER[str.charAt(0) - ZERO] + UNIT[str.length() - 1];
str = str.substring(1);
}
data.add(result);
}
private String show(List<String> data) {
String result = "";
for (int i = data.size() - 1; i >= 0; i--) {
String str = data.get(i);
if (str.length() == 0) {
continue;
}
result += data.get(i) + MATRIX[i];
}
return trimZeroCN(result);
}
private String trimZeroCN(String str) {
if (str.length() <= 1) {
return str;
}
char[] ch = str.toCharArray();
int start = 0;
int end = str.length() - 1;
while (ch[start] == ZERO_CN) {
start++;
}
while (ch[end] == ZERO_CN) {
end--;
}
return str.substring(start, end + 1);
}
}
9223372036854775807 ==> 玖佰贰拾贰吉叁仟叁佰柒拾贰兆零叁佰陆拾捌億伍仟肆佰柒拾柒万伍仟捌佰零柒
100000009 ==> 壹億零玖
103050709 ==> 壹億零叁佰零伍万零柒佰零玖
123456789 ==> 壹億贰仟叁佰肆拾伍万陆仟柒佰捌拾玖
103006 ==> 壹拾万叁仟零陆
100006 ==> 壹拾万零陆
123450 ==> 壹拾贰万叁仟肆佰伍拾
123456 ==> 壹拾贰万叁仟肆佰伍拾陆
10000 ==> 壹万
10005 ==> 壹万零伍
12000 ==> 壹万贰仟
10045 ==> 壹万零肆拾伍
12005 ==> 壹万贰仟零伍
12300 ==> 壹万贰仟叁佰
10345 ==> 壹万零叁佰肆拾伍
12045 ==> 壹万贰仟零肆拾伍
12305 ==> 壹万贰仟叁佰零伍
12340 ==> 壹万贰仟叁佰肆拾
12345 ==> 壹万贰仟叁佰肆拾伍
1000 ==> 壹仟
1004 ==> 壹仟零肆
1034 ==> 壹仟零叁拾肆
1204 ==> 壹仟贰佰零肆
1230 ==> 壹仟贰佰叁拾
1234 ==> 壹仟贰佰叁拾肆
123 ==> 壹佰贰拾叁
12 ==> 壹拾贰
10 ==> 壹拾
6 ==> 陆
0 ==> 零
分享到:
相关推荐
最简单算法:将数字转换为符合使用习惯的大写金额 编写语言:java 输出结果: 1200.00 壹仟贰佰元 1200.10 壹仟贰佰元壹角 1234.05 壹仟贰佰叁拾肆元零伍分 1200.05 壹仟贰佰元零伍分 1004.05 壹仟零肆元零伍分 ...
阿拉伯数字 转换为 中文大写数字的4种算法
这个简单示例实现了由数字转换为汉字大写的方法,核心的部分也就是一个转换算法的处理,以及对输入异常的处理
VC 数字转换为人民币金额大写的简单算法实现 随机输入一串数字,然后通过程序,将其输出对应的人民币金额的大写。例如,输入3568974.5,则输出“叁佰伍拾陆万捌仟玖佰柒拾肆元伍角”,如果输入158526574.25,则输出...
用C#编写的数字转换成中文大写的窗体程序
该算法可以把一串数字转化为英文写法;例如:12345.54转换后为TWELVE THOUSAND THREE HUNDRED AND FORTY FIVE FIFTY FOUR CENTS
--作者:John liu 数字串转中文大写的小代码段, 这个段子使用堆栈算法,可以通用(从内部二进制数转中文大写或数字串转中文大写)
编写程序,处理只包含数字与大写字母的字符串.txt
该工具类用于支持小写数字转化成大写,比如11转换将变成壹拾壹,支持不限制位数 最高单位为亿,里面有详细的注释 方便您自行修改某一些细节问题。
本代码示例了如何将一个整数型数字转换为中文大写金额的算法。
学习调用通用COM组件 微软语音引擎 数字转换成人民币大写(大于十位数) 网上公布的数字转换成人民币大写的方法都是到亿的 超过了亿就不行了 其实只是算法的问题啦 这个版本有bug 请下载上面的
独立开发,实测可用, 将阿拉伯和中文数字组合的字符串转成阿拉伯数字的整型 包。例如: “八万三千20”就可以转成整型 803020 。解压后,引用包。调用方法 在UnitTest.java 中有
算法比较好,精简(最大支转换999999999999.99的数字,正负数均可的源码),需要的朋友可以下载或参考.
网上很多数字金额转人民币大写的代码也很好用,但是一直没有看到中文大写金额转数字的算法,这个是我自己敲的,也运行了单元测试,应该可用的,大家拿起看看吧,有问题欢迎留言!
判断是否是引用类型,浮点数运算(解决计算机运算浮点数精度丢失问题),数组随机洗牌算法,随机整数范围,将阿拉伯数字翻译成中文的大写数字,将数字转换为大写金额,判断一个元素是否在数组中,数组删除其中一个...
小写数字转换成大写数字1.c 小写数字转换成大写数字2.c 小写数字转换成大写数字3.c ./底层编程: asm.c C标志符命名源程序.c ping.c winsock2.c 时间陷阱.c 检出错误.c 检测鼠标.c ./效验算法: C.BAT CMCRC...
一般用于货币,数字对汉字大写的转换,以前见过一个这样的程序,鉴于注释不完整,算法看不懂,还有若干bug,自己实现了一个,源码发布,望指正交流。 邮箱:yyk882002@163.com
python数字金字塔 def GoldTa(input): L = [chr(i) for i in range(65, 91)] # 大写字母A--Z idA = 65 # 从A开始 # ord()函数将字母转换为Unicode数值 idInput = ord(input) num = idInput - idA + 1 # 输入的...
本文实例讲述了Python实现中文数字转换为阿拉伯数字的方法。分享给大家供大家参考,具体如下: 一、需求 今天写了三千二百行代码。 今天写了3200行代码。 两行意思相同,只是表达方式不太能够,统一掉。 二、原理 ...