<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

    導航

    統計

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲午夜精品久久久久久浪潮| 日本免费高清视频| 成人免费看片又大又黄| 亚洲熟妇无码久久精品| 69视频在线观看高清免费| 亚洲天堂中文资源| 8x网站免费入口在线观看| 亚洲第一永久在线观看| 在线看免费观看AV深夜影院| 亚洲精品偷拍无码不卡av| 国产精品免费观看| 亚洲一卡2卡3卡4卡乱码 在线| 成人免费在线观看网站| 亚洲av成人片在线观看| 亚洲精品无码av天堂| 99免费精品视频| 亚洲美女人黄网成人女| 毛片网站免费在线观看| 国产亚洲精品仙踪林在线播放| 亚洲国产精品日韩专区AV| 免费黄网站在线看| 亚洲永久在线观看| 五月天婷亚洲天综合网精品偷| 精品国产呦系列在线观看免费| 亚洲成人免费在线| 妞干网在线免费观看| 亚洲精品偷拍视频免费观看| 亚洲成人中文字幕| 国产午夜影视大全免费观看| 免费无码av片在线观看| 亚洲黄色激情视频| 中国亚洲女人69内射少妇| 1000部拍拍拍18免费网站| 看一级毛片免费观看视频| 精品国产_亚洲人成在线高清| 精品久久久久成人码免费动漫| 美女被羞羞网站免费下载| 亚洲免费在线播放| 亚洲国产精品日韩专区AV| 无遮免费网站在线入口| 羞羞视频免费网站在线看|