📄 金额转换.java
字号:
//说明:如果输入一个不带小数点的整数,则输出***元整;输入小数则换成角分
///但此程序有限制如果输入带小数点的金额,必须是两位以上小数,
///并且金额不能超过一万亿,有兴趣可以自己改进
class ReadString
{
String str;//传入的字符串
String decimalFraction;//小数部分
String integerStr;//整数部分
String arr[];//整数部分,分解后给数组
Boolean FractionID;//检查是否有小数部分
String result;//转换的结果
ReadString(String a)
{
str=a.toString(); //传进所要读的数
}
public void parse()//分解字符串
{
int i=str.trim().indexOf(".");
if(str.indexOf(".")!=-1)//判断有否小数点
{
decimalFraction=str.substring(i+1,i+3);//将字符串分成小数部分与整数部分
integerStr=str.substring(0,i);
FractionID=true;
}
else
{integerStr=str;
FractionID=false;
}
int k=integerStr.length()/4;
this.arr=new String[k+1];
i=0;
int m=integerStr.length();
while(i<=k)//将整数部分分解赋给数组
{if(i==k) //没办法,数组越界,要分开讨论
{
this.arr[i]=integerStr.substring(m-((i+1)*4-1)-1+(k+1)*4-m,m-((i+1)*4-4));
}
else if(i==0)
this.arr[i]=integerStr.substring(m-((i+1)*4-1)-1);//为了清楚一点,我不化简了
else
this.arr[i]=integerStr.substring(m-((i+1)*4-1)-1,m-((i+1)*4-4));
i++;
}
}
public char change(String a)//将阿拉伯数字转成中文
{char b=a.charAt(0);
char c='0';
switch(b)
{
case '1':c='一';break;
case '2':c='二';break;
case '3':c='三';break;
case '4':c='四';break;
case '5':c='五';break;
case '6':c='六';break;
case '7':c='七';break;
case '8':c='八';break;
case '9':c='九';break;
case '0':c='零';break;
}
return c;
}
public String stream(String a)//将数组arr的每个字符串传成中文
{ String m=new String();
if(a.length()==1)
{char[] k={change(a)};m=new String(k);
}
else if(a.length()==2)
{
char a1=change(a.substring(0,1));
char a2='十';
char a3=change(a.substring(1));
if(a3=='零')//如果个位是零,不用读出来
{char[] k={a1,a2};m=new String(k);}
else
{char[] k={a1,a2,a3};m=new String(k);}
}
else if(a.length()==3)
{
char a1=change(a.substring(0,1));//百
char a2='百';
char a3=change(a.substring(1,2));//十
char a4='十';
char a5=change(a.substring(2));//个
if(a5=='零'&&a3=='零')//百位肯定不为零,不用讨论
{char[] k={a1,a2};m=new String(k);}
else if(a3=='零'&&a5!='零')
{char[] k={a1,a2,a3,a5};m=new String(k);}
else if(a3!=0&&a5==0)
{char[] k={a1,a2,a3,a4};m=new String(k);}
else if(a3!=0&&a5!=0)
{char[] k={a1,a2,a3,a4,a5};m=new String(k);}
}
else if(a.length()==4)//四位
{
char a1=change(a.substring(0,1));
char a2='千';
char a3=change(a.substring(1,2));
char a4='百';
char a5=change(a.substring(2,3));
char a6='十';
char a7=change(a.substring(3));
if(a1=='零'&&a3!='零'&&a5!='零'&&a7!='零')//千位为零
{char[] k={a1,a3,a4,a5,a6,a7};m=new String(k);}
else if(a1=='零'&&a3=='零'&&a5!='零'&&a7!='零')
{char[] k={a1,a5,a6,a7};m=new String(k);}
else if(a1=='零'&&a3=='零'&&a5=='零'&&a7!='零')
{char[] k={a1,a7};m=new String(k);}
else if(a1=='零'&&a3=='零'&&a5=='零'&&a7=='零')
{m=new String("");}
//
else if(a1=='零'&&a3!='零'&&a5=='零'&&a7=='零')
{char[] k={a1,a3,a4};m=new String(k);}
else if(a1=='零'&&a3!='零'&&a5!='零'&&a7=='零')
{char[] k={a1,a3,a4,a5,a6};m=new String(k);}
else if(a1=='零'&&a3!='零'&&a5=='零'&&a7!='零')
{char[] k={a1,a3,a4,a5,a7};m=new String(k);}
else if(a1=='零'&&a3!='零'&&a5!='零'&&a7!='零')
{char[] k={a1,a3,a4,a5,a6,a7};m=new String(k);}
//
else if(a1!='零'&&a3=='零'&&a5!='零'&&a7!='零')//千位不为零
{char[] k={a1,a2,a3,a5,a6,a7};m=new String(k);}
else if(a1!='零'&&a3=='零'&&a5=='零'&&a7!='零')
{char[] k={a1,a2,a3,a7};m=new String(k);}
else if(a1!='零'&&a3=='零'&&a5!='零'&&a7=='零')
{char[] k={a1,a2,a3,a5,a6};m=new String(k);}
else if(a1!='零'&&a3=='零'&&a5=='零'&&a7=='零')
{char[] k={a1,a2};m=new String(k);}
//
else if(a1!='零'&&a3!='零'&&a5=='零'&&a7=='零')
{char[] k={a1,a2,a3,a4};m=new String(k);}
else if(a1!='零'&&a3!='零'&&a5!='零'&&a7=='零')
{char[] k={a1,a2,a3,a4,a5,a6};m=new String(k);}
else if(a1!='零'&&a3!='零'&&a5=='零'&&a7!='零')
{char[] k={a1,a2,a3,a4,a5,a7};m=new String(k);}
else if(a1!='零'&&a3!='零'&&a5!='零'&&a7!='零')
{char[] k={a1,a2,a3,a4,a5,a6,a7};m=new String(k);}
}
return m;
}
public void join()//将最后结果拼在一起
{
String integerRead=new String();
this.parse();
int i;
if(this.arr.length-1>2)
{
System.out.println("金额超过界限!");
}
else
{ String fractionRead=new String();
for(i=this.arr.length-1;i>=0;i--)
{
integerRead=integerRead.concat(stream(this.arr[i]));
if(i==2)
integerRead=integerRead.concat("亿");
else if(i==1)
integerRead=integerRead.concat("万");
else if(i==0&&this.FractionID==false)
integerRead=integerRead.concat("元整");
else
integerRead=integerRead.concat("元");
}
//加小数部分
if(FractionID==true)
{
char a1=change(decimalFraction.substring(0,1));
char a2='角';
char a3=change(decimalFraction.substring(1));
char a4='分';
if(a3=='零')
{char[] a={a1,a2};
fractionRead=new String(a);
}
{char[] a={a1,a2,a3,a4};
fractionRead=new String(a);
}
this.result=integerRead.concat(fractionRead);
}
else
this.result=integerRead;
}
}
public void read() //输出结果
{
join();
System.out.println(str);
System.out.println("金额:"+this.result);
}
}
class StringTest
{
public static void main(String[] args)
{
ReadString str=new ReadString("11023.98");
str.read();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -