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 }