当前位置: 代码迷 >> J2SE >> 怎么用JAVA实现数字转换为大写
  详细解决方案

怎么用JAVA实现数字转换为大写

热度:16   发布时间:2016-04-24 00:47:59.0
如何用JAVA实现数字转换为大写?
用JAVA的ArrayList类实现拉个不过有0连着的很不好处理
请高手解答

------解决方案--------------------
不知道链接怎么会出错,还是把代码给你吧.

Java code
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;                                                            //返回正确表示      }}
------解决方案--------------------
Java code
    public static void changToBig(double num)    {        String[] big = {"零","壹","贰","叁","肆","伍","陆","柒","扒","玖"};        String[] bit = {"元","拾","百","千","万","十万","百万","千万","亿"};        String n = Double.toString(num);        String last = n.substring(n.lastIndexOf(".")+1);        String first = n.substring(0,n.lastIndexOf("."));        String print = "";        for(int i=0;i<first.length();i++)        {            print = print + big[Integer.parseInt(first.substring(i,i+1))];            print = print + bit[first.length()-i-1];        }        for(int i=0;i<2;i++)        {            print = print + big[Integer.parseInt(last.substring(i,i+1))];            if(i==0)                print = print + "角";            else                print = print + "分";        }        System.out.println(print);    }
  相关解决方案