1. 程式人生 > 其它 >貨幣小寫轉大寫金額

貨幣小寫轉大寫金額

public class NumToRMB{       public static void main(String[] args){         System.out.println(changeToBig(Double.parseDouble(args[0])));     }       public static String changeToBig(double value){         char[] hunit={'拾','佰','仟'};                                    //段內位置表示         char[] vunit={'萬','億'};                                         //段名錶示         char[] digit={'零','壹','貳','叄','肆','伍','陸','柒','捌','玖'}; //數字表示         long midVal = (long)(value*100);                                  //轉化成整形         String valStr=String.valueOf(midVal);                             //轉化成字串         String head=valStr.substring(0,valStr.length()-2);                //取整數部分         String rail=valStr.substring(valStr.length()-2);                  //取小數部分           String prefix="";                                                 //整數部分轉化的結果         String suffix="";                                                 //小數部分轉化的結果         //處理小數點後面的數         if(rail.equals("00")){                                           //如果小數部分為0           suffix="整";         } else{           suffix=digit[rail.charAt(0)-'0']+"角"+digit[rail.charAt(1)-'0']+"分"; //否則把角分轉化出來         }         //處理小數點前面的數         char[] chDig=head.toCharArray();                   //把整數部分轉化成字元陣列         boolean preZero=false;                             //標誌當前位的上一位是否為有效0位(如萬位的0對千位無效)         byte zeroSerNum = 0;                               //連續出現0的次數         for(int i=0;i<chDig.length;i++){                   //迴圈處理每個數字           int idx=(chDig.length-i-1)%4;                    //取段內位置           int vidx=(chDig.length-i-1)/4;                   //取段位置           if(chDig[i]=='0'){                               //如果當前字元是0             preZero=true;             zeroSerNum++;                                  //連續0次數遞增             if(idx==0 && vidx >0 &&zeroSerNum < 4){               prefix += vunit[vidx-1];               preZero=false;                                //不管上一位是否為0,置為無效0位             }           }else{           zeroSerNum = 0;                                 //連續0次數清零           if(preZero){                                   //上一位為有效0位             prefix+=digit[0];                                //只有在這地方用到'零'             preZero=false;           }           prefix+=digit[chDig[i]-'0'];                    //轉化該數字表示           if(idx > 0) prefix += hunit[idx-1];                            if(idx==0 && vidx>0){             prefix+=vunit[vidx-1];                      //段結束位置應該加上段名如萬,億           }         }         }           if(prefix.length() > 0) prefix += '圓';                               //如果整數部分存在,則有圓的字樣         return prefix+suffix;                                                            //返回正確表示       } }