<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    數字金額的中文大小寫轉化

    曾經去過一家公司面試。筆試題的最后一題是一個數字金額大小寫轉化的問題。
    當時沒想那么多,僅僅想到應該把數拆開然后添加單位的一個大致的設計思路。
    而那個面試官一個勁兒的問我用啥算法。那個題最后也沒答上,回來后比較郁悶,
    在網上搜了一下。這個答案還真不少。不過覺得有一種設計還比較靠譜。
    大概是這樣:
     * 先將整數與小數部分分開,計算小數部分,角分并保存
     * 整數部分長度不足12位,前面加0補足。
     * 將整數部分分割3部分。高4位代表億,中間的是萬,其余分別代表千,百,十,個
     * 定一個方法拼出每一部分串。
     * 最后整數與小數部分合成。

    自己實現了一下,以下是代碼。
    code :

    package com.kangdy.test;
    /**
     * 數字金額轉化成大寫
     * 先將整數與小數部分分開,計算小數部分,角分并保存
     * 整數部分長度不足12位,前面加0補足。
     * 將整數部分分割3部分。高4位代表億,中間的是萬,其余分別代表千,百,十,個
     * 定一個方法拼出每一部分串。
     * 最后整數與小數部分合成。
     * @author dkang
     *
     */
    public class NumberToString {

     String numberStr;

     public static final String unit[] = { "", "十", "百", "千", "萬", "億" };

     public static final String unit2[] = { "元", "角", "分" };

     public static final String numStr[] = { "零", "壹", "貳", "叁", "肆", "伍", "陸",
       "柒", "捌", "玖" };

     /**
      * 字符串長度不足12位用0補足
      *
      * @param str
      * @return
      */
     private String additionalZero(String str) {
      StringBuffer strb = new StringBuffer();
      if (str.length() < 12) {
       int size = 12 - str.length();
       for (int i = 0; i < size; i++) {
        strb.append("0");
       }
      }
      return strb.append(str).toString();
     }

     /**
      * 遞歸拆分數字成字符串
      *
      * @param value
      * @param strBuffer
      * @return
      */
     private String decomposeNumberToString(int value, StringBuffer strBuffer) {
      int quotient = 0;
      quotient = value / 10;
      if (quotient != 0) {
       decomposeNumberToString(quotient, strBuffer);
      }
      int remaider = value % 10;
      strBuffer.append(remaider + ",");
      return strBuffer.toString().substring(0,
        strBuffer.toString().length() - 1);
     }

     /**
      * 使用循環拆分數字成字符串
      *
      * @param value
      * @return
      */
     private String decomposeNumberToString2(int value) {
      StringBuilder strBuilder = new StringBuilder();
      int quotient = value;
      int remaider = 0;
      while (quotient != 0) {
       remaider = quotient % 10;
       strBuilder.append(remaider + ",");
       quotient = quotient / 10;
      }
      strBuilder.deleteCharAt(strBuilder.lastIndexOf(","));
      return strBuilder.reverse().toString();
     }

     /**
      * 添加單位
      *
      * @param temp
      * @return
      */
     private String addUnits(String temp) {
      StringBuffer sb = new StringBuffer();
      String str[] = temp.split(",");
      String tempStr = temp.replace(",", "");
      if (tempStr.contains("000")) {
       return sb.append(resplaceNumToStr(str[0]) + unit[3]).toString();
      } else if (tempStr.contains("00")) {
       if (tempStr.charAt(3) == '0') {
        return sb.append(resplaceNumToStr(str[0]) + unit[3]).append(
          resplaceNumToStr(str[1]) + unit[2]).toString();
       } else {
        return sb.append(resplaceNumToStr(str[0]) + unit[3]).append(
          numStr[0]).append(resplaceNumToStr(str[3])).toString();
       }
      } else {
       for (int i = 0; i < str.length; i++) {
        sb.append(resplaceNumToStr(str[i]));
        if (!str[i].equals("0")) {
         sb.append(unit[str.length - (i + 1)]);
        }
       }
      }
      return sb.toString();
     }

     /**
      * 數字替換
      *
      * @param str
      * @return
      */
     private String resplaceNumToStr(String str) {
      try {
       int num = Integer.parseInt(str);
       return numStr[num];
      } catch (Exception e) {
       e.printStackTrace();
      }
      return "";
     }

     /**
      * 把4位長度的數字轉化成字符串
      *
      * @param number
      * @param i
      * @return
      */
     private String transformNumberToString(String number, int i) {
      StringBuffer strBuffer = new StringBuffer();
      StringBuilder strBuilder = new StringBuilder();
      try {
       int num = Integer.parseInt(number);
       if (num != 0) {
        String s1 = decomposeNumberToString(num, strBuffer);
        strBuilder.append(addUnits(s1));
        if (i == 1) {
         strBuilder.append(unit[5]);
        } else if (i == 2)
         strBuilder.append(unit[4]);
       }
      } catch (Exception e) {
       e.printStackTrace();
      }
      return strBuilder.toString();
     }

     /**
      * 得到最終結果
      *
      * @param str
      * @return
      */
     public String IntegrationResultString(String str) {
      StringBuffer strBuffer = new StringBuffer();
      String numStr[] = null;
      if (str.indexOf(".") != -1) {
       numStr = str.split("\\.");
      } else {
       return strBuffer.append(createIntegerPartsResult(str)).toString();
      }
      String fractionalStr = createFractionalPartsResult(numStr[1]);
      String integerStr = createIntegerPartsResult(numStr[0]);
      return strBuffer.append(integerStr).append(fractionalStr).toString();
     }

     private String createIntegerPartsResult(String integer) {
      StringBuffer strBuffer = new StringBuffer();
      String temp = additionalZero(integer);
      String str1 = temp.substring(0, 4);
      strBuffer.append(transformNumberToString(str1, 1));
      String str2 = temp.substring(4, 8);
      strBuffer.append(transformNumberToString(str2, 2));
      String str3 = temp.substring(8, temp.length());
      strBuffer.append(transformNumberToString(str3, 3) + unit2[0]);
      return strBuffer.toString();
     }

     private String createFractionalPartsResult(String fractionalStr) {
      StringBuilder strB = new StringBuilder();
      String s1 = fractionalStr.substring(0, 1);
      String s2 = fractionalStr.substring(1, fractionalStr.length());
      if (!s1.equals("0")) {
       strB.append(resplaceNumToStr(s1) + unit2[1]);
      }
      if (!s2.equals("0")) {
       strB.append(resplaceNumToStr(s2) + unit2[2]);
      }
      return strB.toString();
     }

     public static void main(String args[]) {
      NumberToString test = new NumberToString();
      String str = "200123004054.11";
      System.out.println(test.IntegrationResultString(str));
     }
    }



    posted on 2010-11-02 14:59 AK47 閱讀(611) 評論(0)  編輯  收藏 所屬分類: java相關

    <2010年11月>
    31123456
    78910111213
    14151617181920
    21222324252627
    2829301234
    567891011

    導航

    統計

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲天堂免费在线| 国产在线观看免费不卡| 8x成人永久免费视频| 91精品国产免费| 亚洲AV无码国产在丝袜线观看| 亚洲天堂久久精品| 亚洲一卡一卡二新区无人区| 精品无码专区亚洲| 中文在线免费看视频| 国产成人久久AV免费| 午夜小视频免费观看| 亚洲国产另类久久久精品黑人| 亚洲精品视频免费| 最近中文字幕电影大全免费版| 久久精品国产亚洲| 四虎在线免费视频| 亚洲色自偷自拍另类小说| 国产99在线|亚洲| a级毛片高清免费视频| 日本一区免费电影| 亚洲一区在线观看视频| 十八禁视频在线观看免费无码无遮挡骂过| 成人午夜免费福利| 亚洲av无码专区在线播放| 少妇无码一区二区三区免费| 久久亚洲中文字幕精品一区四| 亚洲人成小说网站色| 色欲色香天天天综合网站免费 | 黄床大片免费30分钟国产精品| 毛片免费全部免费观看| 青青草国产免费国产是公开| 亚洲免费观看网站| 老妇激情毛片免费| 日本二区免费一片黄2019| 99精品免费视品| 亚洲精品成a人在线观看夫| 在线视频免费观看高清| 亚洲人成人77777在线播放| 一区二区三区观看免费中文视频在线播放| 亚洲成a人片在线观看中文app | 亚洲精品V欧洲精品V日韩精品 |