从命令行参数输入一浮点数值,将其转化为中文金额的大写方式,如123.45,转化为:壹佰贰拾叁元肆角伍分,中间有多个0只要一个零。
package 实验3;
public class Demo {
static String bigLetter[] = {
"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
// 货币单位
static String unit[] = {
"元", "拾", "佰", "仟", "万",
// 拾万位到仟万位
"拾", "佰", "仟",
// 亿位到万亿位
"亿", "拾", "佰", "仟"};
public static void main (String args[]) {
String tmp=args[0];
System.out.println(tmp);
String result []=tmp.split("\\."); //转义字符这里要注意下
int len =result.length;
String s=solve(result[0]);
String s1="";
if (len>1)
s1=fun(result[1]);
System.out.println(new StringBuffer(s).reverse()+s1);
}
public static String solve(String s) //处理整数部分
{
long x=Long.valueOf(s);
int ans=-1,flag=0,zz=0;
String a = "";
if(x==0)
return "零";
while (x>0)
{
ans++;
long m=x%10;
x=x/10;
if (m==0&&flag==1) {
a+=bigLetter[(int) m];
flag=0;
}else if (m==0&&flag==0) {
if(unit[ans]=="万")
zz=1;
if(unit[ans]=="亿")
zz=2;
continue;
}else if (m>0){
if (zz==1)
{
a+="万";
zz=0;
}
if(zz==2)
{
a+="亿";
zz=0;
}
flag=1;
a+=unit[ans];
a+=bigLetter[(int) m];
}
}
return a;
}
public static String fun (String s) {
//处理小数部分,规模小直接if就好了省事
int x=Integer.valueOf(s),ans=0,flag=0,zz=0;
if(x==0)
return "";
if(x<10&&s.length()==1)
return bigLetter[x]+"角";
int m=x%10;
x=x/10;
if (x!=0&&m==0)
{
return bigLetter[x]+"角";
}
if(x==0)
{
return bigLetter[m]+"分";
}
return bigLetter[x]+"角"+bigLetter[m]+"分";
}
}
以下为代码结果:
10000000010.12
壹佰亿零壹拾壹毛贰分
1000000000.12
壹拾亿壹毛贰分
1000010100.02
壹拾亿零壹万零壹佰贰分
1000010100.2
壹拾亿零壹万零壹佰贰角
0.00
零
10000
壹万