最大數字要處理到千億
也就是12位
整數部分我們可以分成3段處理,xxxx億,xxxx萬,xxxx元,然后小數部分比較好處理
我們發現0比較難處理
什么時候會出現零呢
那就是兩個數字之間出現一個或多個零
那么數字可以分成兩類,一類是零,一類是非零
我們只需要統計兩個非零數中間有多少個零
沒有零那就是沒有,有就加上'零'
(非零數用shu這個變量統計,零的數量用ling變量統計)
對於十的讀法,一種是十五,十六,另一種是一百一十五,一千零一十五
我們只需要判斷十前面有沒有其他非零數字就能判斷是‘十’還是‘一十’
對於三段,每段的四位數字處理方法都一樣,處理完的單位(億,萬,元)要么在非零數結尾要么在
零結尾,在這兩個地方都加上判斷即可
import java.text.DecimalFormat; public class NumberUtil { public static String ToChinese(int Number){ String ans=""; String source=String.valueOf(Number); return ans; } public static String ToBig(int num){ String str[]={"壹","貳","叄","肆","伍","陸","柒","捌","玖","十"}; return str[num-1]; } public static String Test2(double x){ DecimalFormat format = new DecimalFormat("#.00"); String str = format.format(x); System.out.println(str); String s[]=str.split("\\."); String temp=""; int ling=0; int shu=0; int pos=0; for(int j=0;j<s[0].length();++j){ int num=s[0].charAt(j)-'0'; if(num==0){ ling++; if(ling==s[0].length()){ temp="零"; } else if(s[0].length()-j-1==4){ if(shu==1&&(s[0].length()-pos-1)>=5&&(s[0].length()-pos-1)<=7){ temp+="萬"; } } else if(s[0].length()-j-1==8){ if(shu==1&&(s[0].length()-pos-1)>=9&&(s[0].length()-pos-1)<=11){ temp+="億"; } } } else{ shu++; int flag=0; if(shu==1){ ling=0; pos=j; } if(shu==2){ flag=1; if(ling>0){ temp+="零"; } shu=1; pos=j; ling=0; } if(s[0].length()-j-1==11){ temp+=ToBig(num)+"千"; } else if(s[0].length()-j-1==10){ temp+=ToBig(num)+"百"; } else if(s[0].length()-j-1==9){ if(num==1&&flag!=1) temp+="十"; else temp+=ToBig(num)+"十"; } else if(s[0].length()-j-1==8){ temp+=ToBig(num)+"億"; } else if(s[0].length()-j-1==7){ temp+=ToBig(num)+"千"; } else if(s[0].length()-j-1==6){ temp+=ToBig(num)+"百"; } else if(s[0].length()-j-1==5){ if(num==1&&flag!=1) temp+="十"; else temp+=ToBig(num)+"十"; } else if(s[0].length()-j-1==4){ temp+=ToBig(num)+"萬"; } else if(s[0].length()-j-1==3){ temp+=ToBig(num)+"千"; } else if(s[0].length()-j-1==2){ temp+=ToBig(num)+"百"; } else if(s[0].length()-j-1==1){ if(num==1&&flag!=1) temp+="十"; else temp+=ToBig(num)+"十"; } else{ temp+=ToBig(num); } } // System.out.println(temp); } temp+="元"; for(int j=0;j<s[1].length();++j){ int num=s[1].charAt(j)-'0'; if(j==0){ if(num!=0) temp+=ToBig(num)+"角"; else if(num==0&&1<s[1].length()&&s[1].charAt(1)!='0'){ temp+="零"; } } else if(j==1){ if(num!=0) temp+=ToBig(num)+"分"; } } System.out.println(temp); return temp; } public static void main(String[] args) { Test2(800230001.23); } }