Java编写的金额转中文大写

来源:互联网 发布:喜欢的衣服淘宝上没有 编辑:程序博客网 时间:2024/04/29 17:23
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                     } else117                     {// 当数字中有零时就在后加上零,如果超过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                     } else151                     {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                             } else172                             {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                     } else195                     {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                             } else218                             {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                     } else238                     {// 当数字中有零时就在后加上零,如果超过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                     } else272                     {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                             } else293                             {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                     } else315                     {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                             } else337                             {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                     } else361                     {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                             } else386                             {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                     } else407                     {// 当数字中有零时就在后加上零,如果超过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             //  如果数字的位数大于16423             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                     } else453                     {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                             } else475                             {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                     } else499                     {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                             } else525                             {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                     } else547                     {// 当数字中有零时就在后加上零,如果超过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                 else572                     chs = chs + "元整";573             } else574             {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         } else586         {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 }

0 0