扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
读入一个浮点数值,将其转化为金额的中文大写方式.
试验要求:
当金额为整数时,只表示整数部分,省略小数部分,并添加"整"字.
当金额中含有连续的0时,只需要一个"零"即可.
10的表示方式.例如110--壹佰一拾元整,10---一拾元整
--------------------------------------------------------------------------------
1import java.io.*;
2class chineseMoney...{
3 private String number[]=...{"","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
4 private String unit[]=...{"","拾","佰","仟"};
5 private String small[]=...{"角","分"};
6 //private String strNumber,strUnit,strAll;
7
8 //是否在number中
9 private boolean IsInNumber(String strNumber)
10 ...{
11 boolean inNumber=false;
12 for (int i=0;i<9;i++)
13 ...{
14 if (strNumber.compareTo (number[i])==0) inNumber=true;
15 }
16 return inNumber;
17 }
18
19
20 private String SplitChineseNumber(int intUnit,String strInt)
21 ...{
22 int l=strInt.length ();
23 int j,k,zeorCountTemp=0;
24 String strUnit="",strNumber="",strAll="";
25
26 //判断在千万到万位 是否全为0,是的话,不返回“万”,返回“”;
27 boolean temp=false;
28 for (k=0;k 30 String strTemp=strInt.substring(k,k+1);
31 int intTemp=Integer.parseInt(strTemp);
32
33 if (intTemp!=0) temp=true;
34 }
35 if (temp==false)
36 ...{
37 if (intUnit==5)return "";
38 }
39
40
41 int checkK=0;
42 //正式开始转换
43 for (k=0;k 45 String strTemp=strInt.substring(k,k+1);
46 int intTemp=Integer.parseInt(strTemp);
47 strNumber= number[intTemp];
48
49 //j 从
50 j=l-1-k;
51
52 strUnit=unit[j];
53
54
55 //数值+单位
56 //如果数值=0,数值=“”
57 if (intTemp==0)
58 ...{
59 //
60 if (zeorCountTemp==0)
61 ...{
62 //单位=零
63 strUnit=strUnit.replace(''''拾'''',''''零'''');
64 strUnit=strUnit.replace(''''佰'''',''''零'''');
65 strUnit=strUnit.replace(''''仟'''',''''零'''');
66 }
67 else
68 ...{
69 //多零情况下,单位=“”
70 strUnit=strUnit.replaceAll("拾","");
71 strUnit=strUnit.replaceAll("佰","");
72 strUnit=strUnit.replaceAll("仟","");
73 }
74 zeorCountTemp++;
75 }
76 checkK=k;
77 strAll+=strNumber+strUnit;
78 }
79
80 return strAll;
81 }
82
83 private String onlyInt(int intInt)
84 ...{
85 String strInt;
86 strInt=String.valueOf(intInt);
87 int l=strInt.length();
88
89 String strAll="";
90 //按照四位 一分隔 来计算
91 if (l>8)//亿
92 ...{
93 strAll+=this.SplitChineseNumber(9,strInt.substring(0,l-8))+"亿";
94 strAll+=this.SplitChineseNumber(5,strInt.substring(l-8,l-4));
95 strAll+=this.SplitChineseNumber(1,strInt.substring(l-4,l))+"元";
96 }
97 else if (l>4)//万
98 ...{
99 strAll+=this.SplitChineseNumber(5,strInt.substring(0,l-4));
100 strAll+=this.SplitChineseNumber(1,strInt.substring(l-4,l))+"元";
101
102 }
103 else if (l>0)
104 ...{
105 strAll+=this.SplitChineseNumber(1,strInt)+"元";
106 }
107//
108//
109//
110//
111// 100101000
112 int checkL=strAll.length();
113
114 char strTemp2;
115 for (int k=1;k 117 strTemp2=strAll.charAt(k);
118 if (strTemp2==''''零'''')
119 ...{
120 //判断零的前后是否有数字,无数字则删除这个零
121 String strBeforeTemp=strAll.substring(k-1,k);
122 String strAfterTemp=strAll.substring(k+1,k+2);
123 if (!this.IsInNumber(strBeforeTemp)&&!this.IsInNumber(strAfterTemp))
124 ...{
125 strBeforeTemp=strAll.substring(0,k);
126 strAfterTemp=strAll.substring(k+1,checkL);
127 strAll= strBeforeTemp+strAfterTemp;
128 break;
129 }
130
131 }
132 }
133
134 return strAll;
135
136 }
137
138 private String onlySmall(int intSmall)
139 ...{
140 String strNumber,strUnit,strAll;
141 strNumber="";strUnit="";strAll="";
142 String strSmall,strTemp;
143 strSmall=String.valueOf(intSmall);
144 int i;
145 if (intSmall>=10)
146 ...{
147 for (i=0;i 149 strTemp=String.valueOf(intSmall).substring(i,i+1);
150 if (Integer.parseInt(strTemp)!=0)
151 ...{
152 strNumber=number[Integer.parseInt(strTemp)];
153 strUnit=small[i];
154 strAll+=strNumber+strUnit;
155 }
156 }
157 }
158 else
159 ...{
160 if (intSmall!=0)
161 ...{
162 strNumber=number[intSmall];
163 strUnit=small[1];
164 strAll+=strNumber+strUnit;
165 }
166 }
167
168 return strAll;
169 }
170
171 public String getChineseMoney(double number)
172 ...{
173 //四舍五入
174 number=(number*100+0.5)/100;
175
176 String strAll,strChineseInt,strChineseSmall,strZheng;;
177 int intInt,intSmall;
178 strChineseInt="";strChineseSmall="";strZheng="";
179
180 //整数部分
181 intInt=(int)( number*100/100);
182 if (intInt!=0)
183 ...{
184 strChineseInt=onlyInt(intInt);
185 }
186 //小数部分
187 double temp=(number-intInt)*100*100/100;
188 //对小数部分四舍五入
189 intSmall=(int)(temp*100+0.5)/100;
190 if (intSmall!=0)
191 ...{
192 strChineseSmall=onlySmall(intSmall);
193 }
194 else
195 ...{
196 strZheng="整";
197 }
198 strAll=strChineseInt+strChineseSmall+strZheng;
199 return strAll;
200 }
201 public static void main(String args[]) throws IOException
202 ...{
203 chineseMoney cm=new chineseMoney();
204 double money;
205 String strMoney,strChineseMoney;
206 strMoney="";
207 //读取
208 System.out.println("输入货币(四舍五入):");
209 BufferedReader cin = new BufferedReader(new InputStreamReader( System.in));
210 strMoney = cin.readLine();
211 money=Double.parseDouble(strMoney);
212 //money=12346.465;//Double.parseDouble(strMoney);
213 strChineseMoney=cm.getChineseMoney(money);
214 System.out.println(strChineseMoney);
215 }
216} |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者