閑話:一個朋友是做财務的,有一天問我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 "";
}
}