1 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 }