转载请注明出处,欢迎讨论!
public class GenChinese {
private final static String[] STR_CHINESE_NUMBER={
"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"
};
private final static String[] STR_SHU_JI = {
"亿","万",""
}; //大数量级
private final static String[] STR_SHU_JI_2={
"千","佰","拾",""
};//千内数量级
public GenChinese() {
}
/**
*
* @param intNumber 需要转换的整数
* @return 返回汉字大写数字
*/
public String genChinese(int intNumber){
StringBuffer rets = new StringBuffer(); //返回字符串
int ret; //临时变量
ret = intNumber;
int i=1; //存储数字长度
while((ret=ret/10)!=0){
i++; //计算数字长度
}
//构建一维数组
int[] intarrrayA=new int[i];
ret = intNumber;
int m = i; //m临时变量
for(m=m-1;m>=0;m--){
intarrrayA[m]=ret%10; //取余
//System.out.println(intarrrayA[m]);
ret = ret/10;
}
//构建二维数组
int rows=1; //二维数组的行数变量
if(i%4==0){
rows=i/4;
}else{
rows=i/4+1;
}
m = i-1; //存储数组下标临时变量
int[][] intArrayB = new int[rows][4];
for(int n=rows-1;n>=0;n--){
for(int a=3;a>=0;a--){
if(m>=0){
intArrayB[n][a] = intarrrayA[m];
}else{
intArrayB[n][a] = 0; //不足4列的前补零,形如数字44构建二维数组维{{0,0,4,4}}
}
m--;
}
}
//打印intArrayB
/**
for(int a=0;a for(int b=0;b<4;b++){
if(b==3){
System.out.println(intArrayB[a][b]);
}else{
System.out.print(intArrayB[a][b]);
}
}
}
*/
//打印汉字过程
int iFlag = 0; //第一行的前面0数字的处理标志
int iZero = 0;
for(int a=0;a for (int b = 0; b < 4; b++) {
if(a==0&&intArrayB[a][b]==0&&iFlag==0){
;
}else{
iFlag = 1; //
if(a==0){ //第一行处理状况,整形不会超过3行
if(iZero==0){ //没有出现零
if(intArrayB[a][b]!=0){
rets.append(STR_CHINESE_NUMBER[intArrayB[a][b]]);
rets.append(STR_SHU_JI_2[b]); //加小数量级
}else{
iZero++;
}
}else{
if(intArrayB[a][b]!=0){
rets.append(STR_CHINESE_NUMBER[0]).append(STR_CHINESE_NUMBER[intArrayB[a][b]]);
rets.append(STR_SHU_JI_2[b]); //加小数量级
iZero = 0;
}else{
if(b==3){
rets.append(STR_CHINESE_NUMBER[0]);
iZero = 0;
}else{
iZero++;
}
}
}
}else if(a>0){
if (iZero == 0) {
if (intArrayB[a][b] != 0) {
rets.append(STR_CHINESE_NUMBER[intArrayB[a][b]]);
rets.append(STR_SHU_JI_2[b]); //加小数量级
}
else {
iZero++;
}
}
else {
if (intArrayB[a][b] != 0) {
rets.append(STR_CHINESE_NUMBER[0]).append(STR_CHINESE_NUMBER[
intArrayB[a][b]]);
rets.append(STR_SHU_JI_2[b]); //加小数量级
iZero = 0;
}
else {
if(b==3&&a!=rows-1){
rets.append(STR_CHINESE_NUMBER[0]);
iZero = 0;
}else{
iZero++;
}
}
}
}
}
}
if(rows==3) //判断大数量级别读取
rets.append(STR_SHU_JI[a]);
else if(rows==2)
rets.append(STR_SHU_JI[a+1]);
else if(rows==1)
rets.append("");
}
return rets.toString();
}
static void printArray(int[] arrayInt){
for(int i=0;i if(i==arrayInt.length-1)
System.out.println(arrayInt[i]);
else
System.out.print(arrayInt[i]+",");
}
public static void main(String[] args){
GenChinese g = new GenChinese();
long m = System.currentTimeMillis();
System.out.println(g.genChinese(1000050404));
long n = System.currentTimeMillis();
System.out.println("运行了"+(n-m));
}
}
分享到:
相关推荐
将阿拉伯数字转换为大写数字,主要解决小数点问题,
汉语大写数字转换成阿拉伯数字。支持如下转换 '一千二百二十一万九千三百五十七亿一千二百二十一万九千零五十七', '一千二百二十一', '一千零十', '一万零一百', '一千零十一', '一万零一百十一', '一千二百...
本人用c写的完成汉语数字串与阿拉伯数字串间转换的一个小工具,完全基于串操作,不需要经过中间数值表示,原则上可以对任意长数字串进行转换,附带汉语数字串的大小写转换功能。
环境:vs2005 C# 功能:阿拉伯数字转换为中文大写数字
1、该dll能将阿拉伯数字转换为汉字数字或者中文大写金额。例如1234567.07可转换为: “一百二十三万四千五百六十七点零七”或“壹佰贰拾叁万肆仟伍佰陆拾柒圆零柒分”。 目前支持正负千亿以内(整数部分不超过12位)...
使用C#实现阿拉伯数字到大写中文的转换
阿拉伯数字转换为人民币大写
我自己写的一个把excel表中阿拉伯数字转换成英文和大写。主要应用在财务方面,小数点保留2位
在excel中使用公式把阿拉伯数字转换成英文大写
阿拉伯数字转换为中文大写
本例子将数字以汉字中的大写数字表示形式显示在页面中。例如“78.79”转换城”“柒拾捌元柒角玖分
阿拉伯数字转换成中文数字, 例如: 10转换成十,111转换成一百一十一 最高支持的数字单位亿, 再大的话可能需要自己修改
会计大小写,把阿拉伯数字变中文大写,,,,,,,,,,,,
将大写数字转换为阿拉伯数字
16位以内阿拉伯数字转中文大写VB源代码 自己写的代码,欢迎提意见,多多交流
佛慈悲,应要求给整个下载在我的资源中,其中包含自学习桌面编程以来所找的资料及未完成的部分学习代码,从未完成的开始转入了另一个急需开发软件的研发工作,所以没时间来作这个的继续,打包原封不动提供学习了. ...
sql server阿拉伯数字转大写中文存储过程
修改了输入小数转换一个错误,修正窗体可调整和图标等
阿拉伯数字转换中文大写(全:大到无量,小到清净) 周末趁热打铁赶了一整天终于写完成并粗鲁测试了一下,发布出来欢迎大家测试交流,如果有发现问题请给我留言,谢谢!如果您用了欢喜,那么,请欢喜合掌,就是我得到回报...
大写数值转换成阿拉伯数字。例如: 一千五百万千零5百 15000500