隨筆 - 7  文章 - 3  trackbacks - 0
          <2011年12月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          常用鏈接

          留言簿

          隨筆檔案

          文章分類

          文章檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          /**
           * 數字轉換為大寫人民幣計數
           * @author 王代軍
           * @since Dec 16,2011
           */

          public class Num2Rmb
          {
              private String[] hanArr = {"零" , "壹" , "貳" , "叁" , "肆" ,
                  "伍" , "陸" , "柒" , "捌" , "玖"};
              private String[] unitArr = {"拾","百","千","萬"};

              /**
               * 把一個四位的數字字符串變成漢字字符串
               * @param numStr 需要被轉換的四位的數字字符串
               * @return 四位的數字字符串被轉換成的漢字字符串。
               */
              private String toHanStr(String numStr)
              {
                  String result = "";
                  int numLen = numStr.length();
                  //依次遍歷數字字符串的每一位數字
                  for (int i = 0 ; i < numLen ; i++ )
                  {
                      //把char型數字轉換成的int型數字,因為它們的ASCII碼值恰好相差48
                      //因此把char型數字減去48得到int型數字,例如'4'被轉換成4。
                      int num = numStr.charAt(i) - 48;
                      //如果不是最后一位數字,而且數字不是零,則需要添加單位(千、百、十)
                      if ( i != numLen - 1 && num != 0)
                      {
                          result += hanArr[num] + unitArr[numLen - 2 - i];
                      }
                      //否則不要添加單位
                      else
                      {
                          
                          //上一個數是否為“零”,不為“零”時就添加
                          if(result.length()>0 && hanArr[num].equals("零") && result.charAt(result.length()-1)=='零')
                              continue;
                          result += hanArr[num];
                      }
                  }
                  //只有個位數,直接返回
                  if(result.length()==1)
                      return result;
                  
                  int index=result.length()-1;
                  while(result.charAt(index)=='零'){
                      index--;
                  }
                  if(index!=result.length()-1)
                      return result.substring(0,index+1);
                  else {
                      return result;
                  }
              }
              /**
               * 把一個輸入的數字字符串變成漢字字符串
               * @param numStr 需要被轉換得到數字字符串
               * @return 數字字符串被轉換成的漢字RMB字符串。
               */
              private String toRmbStr(String numStr){
                  //獲取字符串長度
                  int numLen = numStr.length();
                  //判斷長度小于4(一萬以內~0-9999) 調用toHanStr();
                  if(numLen<=4){
                      return toHanStr(numStr);
                  }
                  //4<長度<=8 (一億以內 1000-99999999)
                  else if(numLen>4&&numLen<=8){
                      String[] subArr={numStr.substring(0, numLen-4),numStr.substring(numLen-4, numLen)};
                      return toHanStr(subArr[0])+"萬"+toHanStr(subArr[1]);
                  }
                  //8<長度<=10 (百億以內 一億-9999999999)
                  else if(numLen>8&&numLen<=10){
                      String[] subArr={numStr.substring(0,numLen-8),numStr.substring(numLen-8,numLen-4),numStr.substring(numLen-4,numLen)};
                      return toHanStr(subArr[0])+"億"+toHanStr(subArr[1])+"萬"+toHanStr(subArr[2]);
                  }
                  else return "輸入有誤!";    
              }          
              public static void main(String[] args)
              {        
                  Num2Rmb nr = new Num2Rmb();
                  System.out.println("只支持整數(0~99億)");
                  //測試把一個四位的數字字符串變成漢字字符串
                  System.out.println(nr.toRmbStr("1"));
                  System.out.println(nr.toRmbStr("10"));
                  System.out.println(nr.toRmbStr("15"));
                  System.out.println(nr.toRmbStr("110"));
                  System.out.println(nr.toRmbStr("123"));
                  System.out.println(nr.toRmbStr("105"));
                  System.out.println(nr.toRmbStr("1000"));
                  System.out.println(nr.toRmbStr("1101"));
                  System.out.println(nr.toRmbStr("1110"));
                  System.out.println(nr.toRmbStr("1005"));
                  System.out.println(nr.toRmbStr("101105"));
                  System.out.println(nr.toRmbStr("1011109"));
                  System.out.println(nr.toRmbStr("9999999999"));
              }
          }

          posted on 2011-12-26 13:26 Tomas 閱讀(570) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
          博客園   IT新聞   Chat2DB   C++博客   博問  
           
          主站蜘蛛池模板: 都安| 临湘市| 黄梅县| 吉林省| 西盟| 焦作市| 金平| 南乐县| 卓资县| 兰考县| 巩留县| 禹州市| 德格县| 屯留县| 集贤县| 庆云县| 丹东市| 长乐市| 永济市| 黑山县| 云龙县| 叙永县| 遂川县| 新乐市| 台中市| 炎陵县| 扎兰屯市| 六枝特区| 光山县| 汾阳市| 连平县| 密云县| 武夷山市| 泸水县| 徐水县| 铜陵市| 德庆县| 贵南县| 永登县| 怀柔区| 方山县|