1. 程式人生 > >萬以內的數字轉換成中文大寫的方法

萬以內的數字轉換成中文大寫的方法

 閒話:一個朋友是做財務的,有一天問我98745的中文大寫是什麼,我也不知道,但是目前好多手機的計算器是可以直接轉換的,所以自己無聊也想寫一段程式碼試試於是就有了今天的水文,但是我個人覺得不算是太水,還是有點點內容的,希望喜歡的朋友可以沒事看看,我也

是一個小白,今年剛大學畢業也才工作幾個月,閒暇之餘就敲一下自己覺得有意思的程式碼,這個算是我的開山之作吧!(由於我個人的時間有

限,沒有太多的時間,所以目前只能做到萬以內的,過萬就不怎麼好用)。

 實現原理:先處理最高位的數,再處理次高位,以此遍歷,最後做一些判斷處理,便完成了這個功能


附上程式碼(寫的很垃圾,不喜勿噴):
package test;

public class ShuZiDaXie {
    final static String O= String.valueOf('零');
    final static String A= String.valueOf('壹');
    final static String B= String.valueOf('貳');
    final static String C= String.valueOf('叄');
    final static String D= String.valueOf('肆');
    final static String E= String.valueOf('伍');
    final static String F= String.valueOf('陸');
    final static String G= String.valueOf('柒');
    final static String H= String.valueOf('捌');
    final static String I= String.valueOf('玖');
    final static String J= String.valueOf('拾');
    final static String K= String.valueOf('佰');
    final static String L= String.valueOf('仟');
    final static String M= String.valueOf('萬');
    //壹  貳  叄  肆  伍  陸 柒  捌  玖 拾 佰 仟 萬


        public static void main(String str[]){
            String ss="";
            String num="11001";
            String num1 = new StringBuffer(num).reverse().toString();//倒序成6543
            char[] nums = num1.toCharArray();//轉成陣列
            for (int i=0;i<nums.length;i++){//遍歷
                Integer n = Integer.valueOf(nums[i]+"");//獲取數字
                if(i>0){//如果不是各位就進行處理
                    if(n==0){//如果說位數的值為零
                        if(!"".equals(ss)){//如果末尾的(也就是各個位往前的位數不為空,就給加個零)
                            if(!ss.contains("零")){//如果中間有很多個的零,那就只要一個
                                ss=getDaXie(n+"")+ss;
                            }
                        }
                    }else{//位數的值不為零,就納入自別的方法處理
                        String test = jialin(nums[i], i);
                        ss= Dispose(test)+ss;
                    }
                }else{//如果是各位數,就直接轉成中文大寫
                    if(nums.length==1){//如果說只有一位數
                        ss=getDaXie(n+"")+ss;//就直接轉成大寫就好了
                    }else{
                        if(n!=0){//如果數字不知個位數的話,只有後面不為零才給轉成大寫,如果說是零的話,就不給轉
                        ss=getDaXie(n+"")+ss;
                        }
                    }
                }
            }
            System.out.println("大寫格式是:"+ss);
        }

    /**
     * 這個方法是將得到的十位,百位,千位,萬位 處理成需要的數字型別,最小單位
     * @param c 數字
     * @param i  1:十位,2:百位,3:千位,4:萬位,
     * @return
     */
    private static String jialin(char c, int i){
            switch (i){
                case 1:return c+"0:10";
                case 2:return c+"00:100";
                case 3:return c+"000:1000";
                case 4:return c+"0000:10000";
            }
            return null;
        }

    /**
     * 利用上面方法返回的值,進行處理,得到一箇中文大寫形式
     * @param test1 返回中文大寫
     * @return
     */
    private static String Dispose(String test1){
            String s="";
            String[] num = test1.split(":");
            //將那個東西解析成兩個數,一個是分母,一個是分子 比如 2000:1000
            // 就可以知道分母是2000 分子是1000 就可以得到 2 和 1000
            // 通過getdaxie方法就能得到 貳仟 兩個字
            if(num.length==2){//防止出錯
                Integer fenmu = Integer.valueOf(num[0]);
                Integer fenzi = Integer.valueOf(num[1]);
                int shuzi = fenmu / fenzi;
                int wei=fenzi;
                s+=getDaXie(shuzi+"");
                s+=getDaXie(wei+"");
            }
            return s;
        }

    /**
     * 將每個數字處理成中文大寫的方法
     * @param c
     * @return
     */
    private static String getDaXie(String c){
        switch (Integer.valueOf(c)){
            case 0:
                return O;
            case 1:
                return A;
            case 2:
                return B;
            case 3:
                return C;
            case 4:
                return D;
            case 5:
                return E;
            case 6:
                return F;
            case 7:
                return G;
            case 8:
                return H;
            case 9:
                return I;
            case 10:
                return J;
            case 100:
                return K;
            case 1000:
                return L;
            case 10000:
                return M;
        }
        return "";
    }

    }


 tip: 之前一直看別人的csdn,今天我也是想自己寫點什麼,也不知道有沒有毅力堅持下去願與之共勉


謝謝閱讀