首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

人民币大小写分析,该如何解决

2011-12-29 
人民币大小写分析以下这个程序是我从一个高手那里拿来的,但是处理0的那一部分我实在是看不懂,请各位帮忙,

人民币大小写分析
以下这个程序是我从一个高手那里拿来的,但是处理0的那一部分我实在是看不懂,请各位帮忙,分不多(没有分了,这是全部家档).先谢了.
public   class   changeToBig{
    public   static   void     main(String   []   args){    
                    char[]       hunit={ '拾 ', '佰 ', '仟 '};                   //段内位置表示    
                    char[]       vuni{ '万 ', '亿 '};                                                                                                                             //段名表示    
                    char[]       digit={ '零 ', '壹 ', '贰 ', '叁 ', '肆 ', '伍 ', '陆 ', '柒 ', '捌 ', '玖 '};           //数字表示    
                    double   value   =   1001001.00;
                    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();               //把整数部分转化成字符数组    
                    char       zero= '0 ';                                                 //标志 '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    
                                    zeroSerNum++;                                   //连续0次数递增    
                                    if(zero       ==       '0 ')
                                    {                                                                 //标志    
                                            zero=digit[0];    
                                    }else                                      


                                        if(idx==0       &&       vidx       > 0       &&zeroSerNum       <       4)
                                    {    
                                            prefix       +=       vunit[vidx-1];    
                                            zero= '0 ';    
                                    }    
                                  continue;    
                            }    
                            zeroSerNum       =       0;                                       //连续0次数清零    
                            if(zero       !=       '0 ')       {                       //如果标志不为0,则加上,例如万,亿什么的    
                                    prefix+=zero;    
                                    zero= '0 ';    
                            }    
                            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       +=       '圆 ';                           //如果整数部分存在,则有圆的字样    
                    System.out.println(prefix+suffix);                                                                                                                                                                                                                                 //返回正确表示    
            }    
            }


[解决办法]
到现在还没有完整的答案
[解决办法]
int idx=(chDig.length-i-1)%4; //取段内位置
int vidx=(chDig.length-i-1)/4; //取段位置

这样就可以把 位数上的数字取出来

[解决办法]
这个是有问题的,试验下100000就知道错误了

热点排行