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

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

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

    數(shù)字金額的中文大小寫轉(zhuǎn)化

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

    自己實現(xiàn)了一下,以下是代碼。
    code :

    package com.kangdy.test;
    /**
     * 數(shù)字金額轉(zhuǎn)化成大寫
     * 先將整數(shù)與小數(shù)部分分開,計算小數(shù)部分,角分并保存
     * 整數(shù)部分長度不足12位,前面加0補足。
     * 將整數(shù)部分分割3部分。高4位代表億,中間的是萬,其余分別代表千,百,十,個
     * 定一個方法拼出每一部分串。
     * 最后整數(shù)與小數(shù)部分合成。
     * @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();
     }

     /**
      * 遞歸拆分?jǐn)?shù)字成字符串
      *
      * @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);
     }

     /**
      * 使用循環(huán)拆分?jǐn)?shù)字成字符串
      *
      * @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();
     }

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

     /**
      * 把4位長度的數(shù)字轉(zhuǎn)化成字符串
      *
      * @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();
     }

     /**
      * 得到最終結(jié)果
      *
      * @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 閱讀(612) 評論(0)  編輯  收藏 所屬分類: java相關(guān)

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

    導(dǎo)航

    統(tǒng)計

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲VA综合VA国产产VA中| 无人在线观看免费高清| 成人免费视频软件网站| 亚洲导航深夜福利| 国产91色综合久久免费分享| 亚洲男女性高爱潮网站| 国产成人精品免费视| 亚洲第一页中文字幕| 18国产精品白浆在线观看免费| 亚洲午夜久久久久久尤物| 成年美女黄网站色大免费视频| 亚洲人成人无码.www石榴| 国产成人高清精品免费软件| 免费精品视频在线| 国产成人亚洲综合无码| 高清永久免费观看| 亚洲第一区香蕉_国产a| 99久久久精品免费观看国产| 99亚偷拍自图区亚洲| 国产一区二区三区无码免费| free哆拍拍免费永久视频| 亚洲国产精品热久久| 无码免费午夜福利片在线| 激情无码亚洲一区二区三区 | 国内永久免费crm系统z在线| 亚洲乱色熟女一区二区三区丝袜| 色欲A∨无码蜜臀AV免费播| 18亚洲男同志videos网站| 卡一卡二卡三在线入口免费| 日韩免费高清一级毛片| 亚洲AV日韩AV永久无码免下载| 免费专区丝袜脚调教视频| 男女污污污超污视频免费在线看| 亚洲国产另类久久久精品| 国产精品69白浆在线观看免费| 另类图片亚洲校园小说区| 久久精品国产亚洲av麻豆小说| 在线观看免费亚洲| 精品一卡2卡三卡4卡免费视频| 亚洲色大成网站www永久网站| 亚洲综合色在线观看亚洲|