Java数组实战训练
前言
我是参考csdn的一位大佬的代码编写的,传送门:java人民币读法转换,以下为详细代码:
- Java数字转人民币读法,代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135import java.util.Scanner;
public class ArrayTest2 {
private String[] str1= {"零","壹","贰","叁","肆","伍",
"陆","柒","捌","玖"};
private String[] str2= {"十","百","千"};
private String[] str3= {"角","分"};
private String[] str4= {"元","万","亿"};
private String divadeZheng(double num) {
//把浮点数分解成整数部分字符串
long zheng=(long)num;
return String.valueOf(zheng);//整型转换成字符串
}
private String divadeXiao(double num) {
//把浮点数分解成小数部分字符串
long zheng=(long)num;
long xiao=Math.round((num-zheng)*100);
//得到浮点数的小数部分
return String.valueOf(xiao);//返回字符串
}
private String toStr1(String xiao) {
//把小数部分的数字字符串转换成汉字字符串
String re1="";
int len=xiao.length();
if(len==2) {
for(int i=0;i<2;i++) {
int num=xiao.charAt(i)-48;//把字符串转换成数字
if(num!=0) {
re1+=str1[num]+str3[i];
//数字不为零则需要加单位,为零则不操作
}
}
}
if(len==1 && xiao.charAt(0)!='0') {
//若长度为1,例:12.09小数部分为9
int num=xiao.charAt(0)-48;
re1+=str1[num]+str3[1];
//此时只有分,加单位str3[1]
}
return re1;
}
private String toStr(String zheng) {
//把一个四位的数字字符串变成汉字字符串
String re="";
int j=0;
int lenz=zheng.length();
if(zheng.charAt(0)=='0' && lenz==1) {
//特殊情况如输入0.89时,整数字符串为0的处理
re+="零";
return re;
}
for(int i=0;i<lenz;i++) {//遍历每一位数字
int num=zheng.charAt(i)-48;
if(i!=lenz-1 && num!=0) {
//若不是最后一位数字且数字不为零,则需要添加单位
re+=str1[num]+str2[lenz-2-i];
} else if(!(num==0 && re.charAt(j-1)=='零')
) {
//对于连续0出现的特殊处理,如009,第二个零不进行操作
re+=str1[num];
}
j=re.length();
}
if(re.charAt(j-1)=='零') {
//对特殊情况最后一位是零的处理,如1990,删除掉末尾的零
re=re.substring(0, j-1);
}
return re;
}
private String zhengDivade(String zheng) {
//对于金额的整数部分在12位数以内的处理,以4位数为一组
//如1234(亿),5678(万),1234(元).89
int len=zheng.length();
String Re="";
int n=0;
if(len>=9)
//判断整数部分的长度,考虑需要分几个组
n=3;
else if(len>=5 && n<9)
n=2;
else if(len>=1 && n<5)
n=1;
if(len%4 != 0) {
//若位数非4的倍数,则在前面补0,直到位数为4的倍数为止
//如12,2345补为0012,2345
String zh="";
int s=len%4;
for(int k=0;k<(4-s);k++) {
//在前面补0
zh+="0";
}
zh+=zheng;
zheng=zh;
}
for(int i=0;i<n;i++) {
//进行n个组合的串联
//进行n次循环
String Zheng="";
String sss="";
len=zheng.length();//长度在变化
//提取出整数部分后四位,进行分开的转换
Zheng=zheng.substring(len-4);
//除去已经提取的字符串以外的字符串,字符串更新
zheng=zheng.substring(0, len-4);
int m=0,me=0;
for(int j=3;j>=0;j--) {
//把字符串转换成整形数,如0012换成12
m=(int)((Zheng.charAt(j)-48)*Math.pow
(10, 3-j));
me+=m;
}
Zheng=String.valueOf(me);//把数字转换成字符串
sss=this.toStr(Zheng);//把字符串转换成中文汉字
sss+=str4[i]+Re;
//衔接上元等单位,再加上已经转换好的汉字字符串,注意每组
//字符串间的顺序
Re=sss;
}
return Re;
}
public static void main(String[] args) {
//输入金额,并将整数部分和小数部分连接
//TODO Auto-generated method stub
ArrayTest2 s=new ArrayTest2();
System.out.println("请输入整数部分为十二位以内的金额:");
Scanner input=new Scanner(System.in);
double a=input.nextDouble();
System.out.println("人民币读法为:");
System.out.println(s.zhengDivade(s.divadeZheng(a))
+s.toStr1(s.divadeXiao(a)));
//将整数部分的汉字字符串和小数部分的汉字字符串连接
}
}