您的位置:首页 > 编程语言 > Java开发

Java编写的金额转中文大写

2015-05-24 20:57 260 查看
package com.coxon.finance.tool;
2
3 public class ChinaNumber
4 {
5
6     private static String[] CH = { "", "", "拾", "佰", "仟", "万", "", "", "", "亿", "", "", "", "兆" };
7
8     private static String[] CHS_NUMBER={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
9
10     /**
11      * 传入数字金额字符串,返回数字金额对应的中文大字与读法
12      *
13      * @param money
14      *            金额字符串
15      * @return 金额中文大写
16      */
17     public static String getCHSNumber(String money)
18     {
19         String chs = "";
20
21         String tmp_int = money.substring(0, money.indexOf("."));
22         String tmp_down = money.substring(money.indexOf(".") + 1, money.length());
23
24         char[] tmp_int_char = tmp_int.toCharArray();
25         String[] tmp_chs = new String[tmp_int_char.length];
26
27         int tab = 0;
28         for (int i = 0; i < tmp_int_char.length; i++)
29         {
30
31             tab = tmp_int_char.length - i - 1;
32
33             if (tmp_int_char.length <= 5)
34             {
35                 tmp_chs[tab] = CHS_NUMBER[(int) Float.parseFloat(tmp_int_char[i] + ".0")];
36
37                 if (!tmp_chs[tab].equals("零"))
38                 {
39
40                     // tmp_int_char.length - i 为数字所在的位数
41                     chs = chs + tmp_chs[tab] + CH[tmp_int_char.length - i];
42                 } else
43                 {// 当数字中有零时就在后加上零,如果超过1个以上的零也只加一个零
44                     if (!chs.endsWith("零") && tab != 0)
45                     {
46                         chs = chs + tmp_chs[tab];
47
48                     } else if (chs.endsWith("零") && tab == 0)
49                     {
50                         chs = chs.substring(0, chs.length() - 1);
51                     }
52
53                 }
54             }
55
56             //  如果数字的位数大于5和小于9时
57             if (tmp_int_char.length > 5 && tmp_int_char.length < 9)
58             {
59                 tmp_chs[tab] = CHS_NUMBER[(int) Float.parseFloat(tmp_int_char[i] + ".0")];
60
61                 // 如:123,1234分成两部分
62                 // 第1部分123:万以上亿以下
63                 if (tab >= 4)
64                 {
65                     // 当前数字不是大小零时
66                     if (!tmp_chs[tab].equals("零"))
67                     {
68                         chs = chs + tmp_chs[tab] + CH[tab - 3];
69
70                         //  当第1部分算完时在加上"万"
71                         if (tab == 4)
72                         {
73                             chs = chs + "万";
74                         }
75
76                     } else
77                     {
78                         // 当前数字为大小"零"时
79                         // 判断前一次形成在字符串结尾有没有零
80                         //  如果没有零就加上零
81                         if (!chs.endsWith("零"))
82                         {
83                             chs = chs + tmp_chs[tab];
84
85                         }
86
87                         // 当第1部分算完时
88
89                         if (tab == 4)
90                         {
91                             //  先判断字符串有没有零
92                             //  如果有零时就把零去掉再加上"万"
93                             if (chs.endsWith("零"))
94                             {
95                                 chs = chs.substring(0, chs.length() - 1);
96                                 chs = chs + "万";
97                             } else
98                             {
99                                 //  如果没有零就直接加上"万"
100                                 chs = chs + "万";
101                             }
102                         }
103                     }
104                 }
105
106                 // 如:123,1234分成两部分
107                 // 第1部分1234:万以下
108                 if (tab < 4)
109                 {
110
111                     if (!tmp_chs[tab].equals("零"))
112                     {
113
114                         // tmp_int_char.length - i 为数字所在的位数
115                         chs = chs + tmp_chs[tab] + CH[tmp_int_char.length - i];
116                     } else
117                     {// 当数字中有零时就在后加上零,如果超过1个以上的零也只加一个零
118                         if (!chs.endsWith("零") && tab != 0)
119                         {
120                             chs = chs + tmp_chs[tab];
121
122                         }
123
124                         if (chs.endsWith("零") && tab == 0)
125                         {
126                             chs = chs.substring(0, chs.length() - 1);
127                         }
128                     }
129                 }
130             }
131
132             //  如果数字的位数大于5和小于9时
133             if (tmp_int_char.length >= 9 && tmp_int_char.length <= 12)
134             {
135                 tmp_chs[tab] = CHS_NUMBER[(int) Float.parseFloat(tmp_int_char[i] + ".0")];
136
137                 if (tab >= 8 && tab < 12)
138                 {
139                     // 当前数字不是大小零时
140                     if (!tmp_chs[tab].equals("零"))
141                     {
142                         chs = chs + tmp_chs[tab] + CH[tab - 7];
143
144                         //  当第1部分算完时在加上"万"
145                         if (tab == 8)
146                         {
147                             chs = chs + "亿";
148                         }
149
150                     } else
151                     {
152                         // 当前数字为大小"零"时
153                         // 判断前一次形成在字符串结尾有没有零
154                         //  如果没有零就加上零
155                         if (!chs.endsWith("零"))
156                         {
157                             chs = chs + tmp_chs[tab];
158
159                         }
160
161                         // 当第1部分算完时
162
163                         if (tab == 8)
164                         {
165                             //  先判断字符串有没有零
166                             //  如果有零时就把零去掉再加上"万"
167                             if (chs.endsWith("零"))
168                             {
169                                 chs = chs.substring(0, chs.length() - 1);
170                                 chs = chs + "亿";
171                             } else
172                             {
173                                 //  如果没有零就直接加上"万"
174                                 chs = chs + "亿";
175                             }
176                         }
177                     }
178                 }
179                 // 如:123,1234分成两部分
180                 // 第1部分123:万以上亿以下
181                 if (tab >= 4 && tab < 8)
182                 {
183                     // 当前数字不是大小零时
184                     if (!tmp_chs[tab].equals("零"))
185                     {
186                         chs = chs + tmp_chs[tab] + CH[tab - 3];
187
188                         //  当第1部分算完时在加上"万"
189                         if (tab == 4)
190                         {
191                             chs = chs + "万";
192                         }
193
194                     } else
195                     {
196                         // 当前数字为大小"零"时
197                         // 判断前一次形成在字符串结尾有没有零
198                         //  如果没有零就加上零
199                         if (!chs.endsWith("零"))
200                         {
201                             chs = chs + tmp_chs[tab];
202
203                         }
204
205                         // 当第1部分算完时
206
207                         if (tab == 4)
208                         {
209                             //  先判断字符串有没有零
210                             //  如果有零时就把零去掉再加上"万"
211                             if (chs.endsWith("零"))
212                             {
213                                 chs = chs.substring(0, chs.length() - 1);
214
215                                 if (!chs.endsWith("亿"))
216                                     chs = chs + "万";
217                             } else
218                             {
219                                 //  如果没有零就直接加上"万"
220                                 if (!chs.endsWith("亿"))
221                                     chs = chs + "万";
222                             }
223                         }
224                     }
225                 }
226
227                 // 如:123,1234分成两部分
228                 // 第1部分1234:万以下
229                 if (tab < 4)
230                 {
231
232                     if (!tmp_chs[tab].equals("零"))
233                     {
234
235                         // tmp_int_char.length - i 为数字所在的位数
236                         chs = chs + tmp_chs[tab] + CH[tmp_int_char.length - i];
237                     } else
238                     {// 当数字中有零时就在后加上零,如果超过1个以上的零也只加一个零
239                         if (!chs.endsWith("零") && tab != 0)
240                         {
241                             chs = chs + tmp_chs[tab];
242
243                         }
244
245                         if (chs.endsWith("零") && tab == 0)
246                         {
247                             chs = chs.substring(0, chs.length() - 1);
248                         }
249                     }
250                 }
251             }
252
253             //  如果数字的位数大于12和小于16时
254             if (tmp_int_char.length > 12 && tmp_int_char.length <= 16)
255             {
256                 tmp_chs[tab] = CHS_NUMBER[(int) Float.parseFloat(tmp_int_char[i] + ".0")];
257
258                 if (tab >= 12 && tab < 16)
259                 {
260                     // 当前数字不是大小零时
261                     if (!tmp_chs[tab].equals("零"))
262                     {
263                         chs = chs + tmp_chs[tab] + CH[tab - 11];
264
265                         //  当第1部分算完时在加上"万"
266                         if (tab == 12)
267                         {
268                             chs = chs + "兆";
269                         }
270
271                     } else
272                     {
273                         // 当前数字为大小"零"时
274                         // 判断前一次形成在字符串结尾有没有零
275                         //  如果没有零就加上零
276                         if (!chs.endsWith("零"))
277                         {
278                             chs = chs + tmp_chs[tab];
279
280                         }
281
282                         // 当第1部分算完时
283
284                         if (tab == 12)
285                         {
286                             //  先判断字符串有没有零
287                             //  如果有零时就把零去掉再加上"万"
288                             if (chs.endsWith("零"))
289                             {
290                                 chs = chs.substring(0, chs.length() - 1);
291                                 chs = chs + "兆";
292                             } else
293                             {
294                                 //  如果没有零就直接加上"万"
295                                 chs = chs + "兆";
296                             }
297                         }
298                     }
299                 }
300
301                 if (tab >= 8 && tab < 12)
302                 {
303                     // 当前数字不是大小零时
304                     if (!tmp_chs[tab].equals("零"))
305                     {
306                         chs = chs + tmp_chs[tab] + CH[tab - 7];
307
308                         //  当第1部分算完时在加上"万"
309                         if (tab == 8)
310                         {
311                             chs = chs + "亿";
312                         }
313
314                     } else
315                     {
316                         // 当前数字为大小"零"时
317                         // 判断前一次形成在字符串结尾有没有零
318                         //  如果没有零就加上零
319                         if (!chs.endsWith("零"))
320                         {
321                             chs = chs + tmp_chs[tab];
322
323                         }
324
325                         // 当第1部分算完时
326
327                         if (tab == 8)
328                         {
329                             //  先判断字符串有没有零
330                             //  如果有零时就把零去掉再加上"万"
331                             if (chs.endsWith("零"))
332                             {
333                                 chs = chs.substring(0, chs.length() - 1);
334                                 if (!chs.endsWith("兆"))
335                                     chs = chs + "亿";
336                             } else
337                             {
338                                 //  如果没有零就直接加上"万"
339                                 if (!chs.endsWith("兆"))
340                                     chs = chs + "亿";
341                             }
342                         }
343                     }
344                 }
345                 // 如:123,1234分成两部分
346                 // 第1部分123:万以上亿以下
347                 if (tab >= 4 && tab < 8)
348                 {
349                     // 当前数字不是大小零时
350                     if (!tmp_chs[tab].equals("零"))
351                     {
352                         chs = chs + tmp_chs[tab] + CH[tab - 3];
353
354                         //  当第1部分算完时在加上"万"
355                         if (tab == 4)
356                         {
357                             chs = chs + "万";
358                         }
359
360                     } else
361                     {
362                         // 当前数字为大小"零"时
363                         // 判断前一次形成在字符串结尾有没有零
364                         //  如果没有零就加上零
365                         if (!chs.endsWith("零"))
366                         {
367                             chs = chs + tmp_chs[tab];
368
369                         }
370
371                         // 当第1部分算完时
372
373                         if (tab == 4)
374                         {
375                             //  先判断字符串有没有零
376                             //  如果有零时就把零去掉再加上"万"
377                             if (chs.endsWith("零"))
378                             {
379                                 chs = chs.substring(0, chs.length() - 1);
380
381                                 if (!chs.endsWith("亿"))
382                                     if (!chs.endsWith("兆"))
383                                         if (!chs.endsWith("兆"))
384                                             chs = chs + "万";
385                             } else
386                             {
387                                 //  如果没有零就直接加上"万"
388                                 if (!chs.endsWith("亿"))
389                                     if (!chs.endsWith("兆"))
390                                         chs = chs + "万";
391                             }
392                         }
393                     }
394                 }
395
396                 // 如:123,1234分成两部分
397                 // 第1部分1234:万以下
398                 if (tab < 4)
399                 {
400
401                     if (!tmp_chs[tab].equals("零"))
402                     {
403
404                         // tmp_int_char.length - i 为数字所在的位数
405                         chs = chs + tmp_chs[tab] + CH[tmp_int_char.length - i];
406                     } else
407                     {// 当数字中有零时就在后加上零,如果超过1个以上的零也只加一个零
408                         if (!chs.endsWith("零") && tab != 0)
409                         {
410                             chs = chs + tmp_chs[tab];
411
412                         }
413
414                         if (chs.endsWith("零") && tab == 0)
415                         {
416                             chs = chs.substring(0, chs.length() - 1);
417                         }
418                     }
419                 }
420             }
421
422             //  如果数字的位数大于16
423             if (tmp_int_char.length > 16)
424             {
425                 tmp_chs[tab] = CHS_NUMBER[(int) Float.parseFloat(tmp_int_char[i] + ".0")];
426
427                 if (tab >= 12)
428                 {
429                     chs = chs + tmp_chs[tab];
430
431                     //  当第1部分算完时在加上"万"
432                     if (tab == 12)
433                     {
434                         chs = chs + "兆";
435                     }
436
437                 }
438
439                 if (tab >= 8 && tab < 12)
440                 {
441                     // 当前数字不是大小零时
442                     if (!tmp_chs[tab].equals("零"))
443                     {
444                         chs = chs + tmp_chs[tab] + CH[tab - 7];
445
446                         //  当第1部分算完时在加上"万"
447                         if (tab == 8)
448                         {
449                             chs = chs + "亿";
450                         }
451
452                     } else
453                     {
454                         // 当前数字为大小"零"时
455                         // 判断前一次形成在字符串结尾有没有零
456                         //  如果没有零就加上零
457                         if (!chs.endsWith("零"))
458                         {
459                             chs = chs + tmp_chs[tab];
460
461                         }
462
463                         // 当第1部分算完时
464
465                         if (tab == 8)
466                         {
467                             //  先判断字符串有没有零
468                             //  如果有零时就把零去掉再加上"万"
469                             if (chs.endsWith("零"))
470                             {
471                                 chs = chs.substring(0, chs.length() - 1);
472                                 if (!chs.endsWith("兆"))
473                                     chs = chs + "亿";
474                             } else
475                             {
476                                 //  如果没有零就直接加上"万"
477                                 if (!chs.endsWith("兆"))
478                                     chs = chs + "亿";
479                             }
480                         }
481                     }
482                 }
483                 // 如:123,1234分成两部分
484                 // 第1部分123:万以上亿以下
485                 if (tab >= 4 && tab < 8)
486                 {
487                     // 当前数字不是大小零时
488                     if (!tmp_chs[tab].equals("零"))
489                     {
490                         chs = chs + tmp_chs[tab] + CH[tab - 3];
491
492                         //  当第1部分算完时在加上"万"
493                         if (tab == 4)
494                         {
495                             chs = chs + "万";
496                         }
497
498                     } else
499                     {
500                         // 当前数字为大小"零"时
501                         // 判断前一次形成在字符串结尾有没有零
502                         //  如果没有零就加上零
503                         if (!chs.endsWith("零"))
504                         {
505                             chs = chs + tmp_chs[tab];
506
507                         }
508
509                         // 当第1部分算完时
510
511                         if (tab == 4)
512                         {
513                             //  先判断字符串有没有零
514                             //  如果有零时就把零去掉再加上"万"
515                             if (chs.endsWith("零"))
516                             {
517                                 chs = chs.substring(0, chs.length() - 1);
518
519                                 if (!chs.endsWith("兆"))
520
521                                     if (!chs.endsWith("亿"))
522
523                                         chs = chs + "万";
524                             } else
525                             {
526                                 //  如果没有零就直接加上"万"
527                                 if (!chs.endsWith("兆"))
528
529                                     if (!chs.endsWith("亿"))
530                                         chs = chs + "万";
531                             }
532                         }
533                     }
534                 }
535
536                 // 如:123,1234分成两部分
537                 // 第1部分1234:万以下
538                 if (tab < 4)
539                 {
540
541                     if (!tmp_chs[tab].equals("零"))
542                     {
543
544                         // tmp_int_char.length - i 为数字所在的位数
545                         chs = chs + tmp_chs[tab] + CH[tmp_int_char.length - i];
546                     } else
547                     {// 当数字中有零时就在后加上零,如果超过1个以上的零也只加一个零
548                         if (!chs.endsWith("零") && tab != 0)
549                         {
550                             chs = chs + tmp_chs[tab];
551
552                         }
553
554                         if (chs.endsWith("零") && tab == 0)
555                         {
556                             chs = chs.substring(0, chs.length() - 1);
557                         }
558                     }
559                 }
560             }
561         }
562
563         if (tmp_down != null)
564         {
565             char[] tmp = tmp_down.toCharArray();
566
567             if (tmp.length == 1)
568             {
569                 if (tmp[0] != '0')
570                     chs = chs + "元" + CHS_NUMBER[(int) Float.parseFloat(tmp[0] + ".0")] + "角整";
571                 else
572                     chs = chs + "元整";
573             } else
574             {
575                 if (tmp[1] != '0' && tmp[0] != '0')
576                 {
577                     chs = chs + "元" + CHS_NUMBER[(int) Float.parseFloat(tmp[0] + ".0")] + "角"
578                             + CHS_NUMBER[(int) Float.parseFloat(tmp[1] + ".0")] + "分";
579                 } else if (tmp[1] != '0' && tmp[0] == '0')
580                 {
581                     chs = chs + "元零" + CHS_NUMBER[(int) Float.parseFloat(tmp[1] + ".0")] + "分";
582                 }
583             }
584
585         } else
586         {
587             chs = chs + "元整";
588         }
589
590         return chs;
591     }
592
593     public static void main(String[] args)
594     {
595         String m = "6136347.42";
596         System.out.println(ChinaNumber.getCHSNumber(m));
597         m = "641295403.34";
598         System.out.println(ChinaNumber.getCHSNumber(m));
599     }
600 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: