java 将一个正整数翻译成人民币大写的读法

时间:2024-10-27 18:03:32

程序如下:

 import java.lang.StringBuffer;
/**
给定一个浮点数,将其装换成人民币大写的读法
88.5:捌十捌元零伍角
*/
public class Num2Rmb
{
private String[] hanArr={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"}; //将一个浮点数分解成整数部分和小数部分,小数部分保留两位小数
private String[] divide(double num)
{
long zheng=(long)num;
long xiao=Math.round((num-zheng)*100);
return new String[]{zheng+"",String.valueOf(xiao)};
} private String toHanStr(String numStr)
{
String str="";
//先转换正数
int numLen=numStr.length();
if(numLen>9)
{
System.out.println("输入的浮点数的正数部分的长度不能超过9,最大为9.");
return "";
}
for(int i=0;i<numLen;i++)
{
int number= numStr.charAt(i)-48;
str+=hanArr[number];
}
//给正数部分添加单位
/**
1 2 3 4 5 6 7 8 9
1亿2千3百4十5万6千7百8十9
*/
String[] unit=new String[]{"亿","千","百","十","万"};
String newStr="";
switch(numLen)
{
case 9:
for(int i=0;i<numLen;i++)
{
//取字符
char ch=str.charAt(i);
if(i==0)
newStr+=ch+unit[0];
if(i==1)
newStr+=ch+unit[1];
if(i==2)
newStr+=ch+unit[2];
if(i==3)
newStr+=ch+unit[3];
if(i==4)
newStr+=ch+unit[4];
if(i==5)
newStr+=ch+unit[1];
if(i==6)
newStr+=ch+unit[2];
if(i==7)
newStr+=ch+unit[3];
if(i==8)
newStr+=ch;
}
break;
case 8://
for(int i=0;i<numLen;i++)
{
//取字符
char ch=str.charAt(i);
if(i==0)
newStr+=ch+unit[1];
if(i==1)
newStr+=ch+unit[2];
if(i==2)
newStr+=ch+unit[3];
if(i==3)
newStr+=ch+unit[4];
if(i==4)
newStr+=ch+unit[1];
if(i==5)
newStr+=ch+unit[2];
if(i==6)
newStr+=ch+unit[4];
if(i==7)
newStr+=ch;
}
break;
case 7://
for(int i=0;i<numLen;i++)
{
//取字符
char ch=str.charAt(i);
if(i==0)
newStr+=ch+unit[2];
if(i==1)
newStr+=ch+unit[3];
if(i==2)
newStr+=ch+unit[4];
if(i==3)
newStr+=ch+unit[1];
if(i==4)
newStr+=ch+unit[2];
if(i==5)
newStr+=ch+unit[3];
if(i==6)
newStr+=ch;
}
break;
case 6://
for(int i=0;i<numLen;i++)
{
//取字符
char ch=str.charAt(i);
if(i==0)
newStr+=ch+unit[3];
if(i==1)
newStr+=ch+unit[4];
if(i==2)
newStr+=ch+unit[1];
if(i==3)
newStr+=ch+unit[2];
if(i==4)
newStr+=ch+unit[4];
if(i==5)
newStr+=ch;
}
break;
case 5://
for(int i=0;i<numLen;i++)
{
//取字符
char ch=str.charAt(i);
if(i==0)
newStr+=ch+unit[4];
if(i==1)
newStr+=ch+unit[1];
if(i==2)
newStr+=ch+unit[2];
if(i==3)
newStr+=ch+unit[3];
if(i==4)
newStr+=ch;
}
break;
case 4://
for(int i=0;i<numLen;i++)
{
//取字符
char ch=str.charAt(i);
if(i==0)
newStr+=ch+unit[1];
if(i==1)
newStr+=ch+unit[2];
if(i==2)
newStr+=ch+unit[3];
if(i==3)
newStr+=ch;
}
break;
case 3://
for(int i=0;i<numLen;i++)
{
//取字符
char ch=str.charAt(i);
if(i==0)
newStr+=ch+unit[2];
if(i==1)
newStr+=ch+unit[3];
if(i==2)
newStr+=ch;
}
break;
case 2://
for(int i=0;i<numLen;i++)
{
//取字符
char ch=str.charAt(i);
if(i==0)
newStr+=ch+unit[3];
if(i==1)
newStr+=ch;
}
break;
case 1:
newStr+=str;
break;
default:
break;
}
newStr+="元";
String endStr="";
StringBuffer sb=new StringBuffer(newStr);
//处理转换后的字符串里面多个零的情况,寄将零后面的单位去掉
for(int j=0;j<newStr.length();j++)
{
char ch=newStr.charAt(j);
if(ch=='零')
{
sb.replace(j+1,j+2,"*");
} }
//if(index>0)//
endStr=sb.toString().replace("*",""); StringBuffer sb0=new StringBuffer(endStr);
int dou=sb0.toString().indexOf("零零");
if(dou>0)
{
sb0.replace(dou,dou+1,"");
}
return sb0.toString(); } public static void main(String[] args)
{
StringBuffer sb=new StringBuffer("abbcdf");
int index0=sb.toString().indexOf("bb");
System.out.println(index0);
sb.replace(index0,index0+2,"m");
System.out.println(sb.toString());
String s="abcd";
int index=s.indexOf("f");
System.out.println(index);
Num2Rmb nr=new Num2Rmb();
String[] numStr= nr.divide(100345678.25);
String str= nr.toHanStr(numStr[0]);
System.out.println(str);
}
} 运行效果如下:

java 将一个正整数翻译成人民币大写的读法