萬以內的數字轉換成中文大寫的方法
阿新 • • 發佈:2018-11-11
閒話:一個朋友是做財務的,有一天問我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,今天我也是想自己寫點什麼,也不知道有沒有毅力堅持下去願與之共勉
謝謝閱讀