将数字大小写转换,例如10.1转换成壹拾点壹

解决方案 »

  1.   

    楼主没有在csdn上找找?这是论坛上找到的很久之前的一个解决方法,转帖给你,
    import   java.text.DecimalFormat; /** 
      *   小写金额转换大写金额 
      *   @author   Lucky   &   Ryan 
      */ 
    public   class   ChnAmt 

    private   String[]   saChnAmount   =   new   String[50]; 
    private   int   iArrayLen   =   0; 
    private   int   iArrayPos   =   0; /** 
      *   构造-小写金额转换大写对象(不带参) 
      *   @param String sAmount 
      */ 
    public   ChnAmt(   String   sAmount   )   { 
    int   iDecFrac   =   0; if   (   sAmount.indexOf(   ". "   )   !=   -1   )   { 
    iDecFrac   =   sAmount.length()   -   sAmount.indexOf(   ". "   ); 
    if   (   iDecFrac   >   3   )   { 
    iDecFrac   =   3; 

    sAmount   =   sAmount.substring(   0,   sAmount.indexOf(   ". "   )   )   
    +   sAmount.substring(   sAmount.indexOf(   ". "   )   +   1,   sAmount.indexOf(   ". "   )   +   iDecFrac   ); 
    for   (   ;   iDecFrac   <   3;   iDecFrac++   )   { 
    sAmount   +=   "0 "; 

    }   else   { 
    sAmount   +=   "00 "; 
    } toChnAmt(   sAmount,   2,   false   ); 

    /** 
      *   构造-小写金额转换大写对象(带参) 
      *   @param String sAmount 
      *   @param int iDec 
      *   @param boolean bDot 
      */ 
    public   ChnAmt(   String   sAmount,   int   iDec,   boolean   bDot   )   { 
    if   (   bDot   )   { 
    if   (   sAmount.indexOf(   ". "   )   <   0   )   { 
    //   没有小数点 
    sAmount   +=   ". "; 
    for   (   int   iFor   =   iDec;   iFor   >   0;   iFor--   )   { 
    sAmount   +=   "0 "; 

    }   else   { 
    int   iDecLen   =   sAmount.length()   -   sAmount.indexOf(   ". "   )   -   1   ; 
    if   (   iDecLen   >   iDec   )   { 
    //   去位 
    sAmount   =   sAmount.substring(   0,   sAmount.indexOf(   ". "   )   +   iDec   +   1   ); 
    }   else   if   (   iDecLen   <   iDec   )   { 
    //   补零 
    for   (   int   iFor   =   iDec   -   iDecLen;   iFor   >   0;   iFor--   )   { 
    sAmount   +=   "0 "; 




    toChnAmt(   sAmount,   iDec,   bDot   ); 
    } /** 
      *   小写金额转换大写 
      *   @param String sAmount 
      *   @param int iDec 
      *   @param boolean bDot 
      */ 
    public   void   toChnAmt(   String   sAmount,   int   iDec,   boolean   bDot   )   { 
    //   数字 
    final   String   []   sUserCode   =   { "零 ",   "壹 ",   "贰 ",   "叁 ",   "肆 ",   "伍 ",   "陆 ",   "柒 ",   "捌 ",   "玖 "   }; 
    //   单位 
    final   String   []   sChnUnit     =   { "厘 ", "分 ", "角 ", "元 ", "十 ", "百 ", "千 ", "万 ", "十 ", "百 ", "千 ", "亿 ", "十 ", "百 ", "千 ", "万 "}; 
    //   整 
    final   String   sSpecEnd   =   "整 "; 
    //   标志 
    //   '9 '代表十 
    //   '3 '   -   '元 ',   '1 '   -   '万 '(   如遇前一生成字符为 '亿 ',则不生成 '万 '   ),   '3 '   -   '亿 ' 
    //   '0 '   -   其他 
    final   byte   []   byFlag   =   { 0, 0, 0, 3, 9, 0, 0, 1, 9, 0, 0, 3, 9, 0, 0, 0   }; int   iCounter,   iPos; 
    byte   byPreFlag=-1; 
    char   cDigit,   cPreDigit= '   '; iArrayLen   =   0; switch   (   iDec   )   { 
    //   补零 
    case   0: 
    sAmount   +=   "0 "; 
    case   1: 
    sAmount   +=   "0 "; 
    case   2: 
    sAmount   +=   "0 "; 
    case   3: 
    break; 
    default: 
    sAmount   =   sAmount.substring(0,sAmount.length()-iDec   +   3)   ; 
    } if   (   bDot   )   { 
    //   转换小数点 
    sAmount   =   sAmount.substring(0,sAmount.length()-4   )   +   sAmount.substring(sAmount.length()-3   ); 
    } //   开始转换 
    for(   iCounter=sAmount.length()   ;   iCounter> 0;   iCounter--) 

    //   计算数字位置 
    iPos   =   sAmount.length()   -   iCounter; 
    //   获得数字字符 
    cDigit   =   sAmount.charAt(iPos); //   过滤数字 
    if   (   cDigit < '0 '   ||   cDigit> '9 '   )   cDigit   =   '0 '; if   (   cDigit   !=   '0 '   )   { 
    //   当前数字不为 '0 ' 
    if   (   cPreDigit   ==   '0 '   )   { 
    //   前一数字为 '0 ' 
    if   (   byPreFlag   !=   3   &&   byPreFlag   !=   1   )   { 
    //   '亿 ', '万 ', '元 '   后不加   '零 ' 
    saChnAmount[   ++iArrayLen   ]   =   sUserCode[   0   ]; 

    } if   (   cDigit   == '1 '   &&   byFlag[iCounter-1]   ==   9   &&   iArrayLen   ==   0   )   { 
    //   数字为 '1 ',单位为 '十 ',且为第一个数字时,不报 '1 ',只报 '十 ' 
    saChnAmount[   ++iArrayLen   ]   =   sChnUnit[   iCounter   -   1   ]; 
    }   else   { 
    //   生成数字 
    saChnAmount[   ++iArrayLen   ]   =   sUserCode[   Character.digit(   cDigit,   10   )   ]; 
    //   生成单位 
    saChnAmount[   ++iArrayLen   ]   =   sChnUnit[   iCounter   -   1   ]; //   记录当前位标志 
    byPreFlag   =   byFlag[iCounter-1]; 

    }   else   { 
    //   数字为 '0 ' 
    if   (   iArrayLen   ==   0   )   { 
    //   过滤首位 '0 ' 
    continue; 
    }   else   { 
    if   (   byFlag[iCounter-1]   ==   3   ||   (   byFlag[iCounter-1]==1   &&   byPreFlag!=3   &&   !saChnAmount[   iArrayLen   ].equals(   sChnUnit[   11   ]   )   )   )   { 
    //   生成 '亿 ', '万 ', '元 '的单位,但如果从 '千万 '位到 '万 '位都为0,则不生成 '万 ' 
    saChnAmount[   ++iArrayLen   ]   =   sChnUnit[   iCounter   -   1   ]; 

    //   记录当前位标志 
    byPreFlag   =   byFlag[iCounter-1]; 

    } //   记录当前数字 
    cPreDigit   =   cDigit; 
    } if   (   iArrayLen   ==   0   )   { 
    //   转换结束数组长度为0,生成 '0元整 ' 
    saChnAmount[   ++iArrayLen   ]   =   sUserCode[   0   ]; 
    saChnAmount[   ++iArrayLen   ]   =   sChnUnit[   3   ]; 
    saChnAmount[   ++iArrayLen   ]   =   sSpecEnd; 
    } if   (   saChnAmount[   iArrayLen   ].equals(   sChnUnit[   3   ]   )   )   { 
    //   最后位为 '元 ',加上 '整 ' 
    saChnAmount[   ++iArrayLen   ]   =   sSpecEnd; 
    } } /** 
      *   判断是否还有下一个转换元素 
      *   @return boolean 
      */ 
    public   boolean   next()   { 
    boolean   bRtn   =   false; if   (   iArrayPos++   <   iArrayLen   )   { 
    bRtn   =   true; 

    return   bRtn; } /** 
      *   获取当前转换元素 
      *   @return String 
      */ 
    public   String   getResult()   { 
    String   sRtn   =   " "; sRtn   =   saChnAmount[   iArrayPos   ]; return   sRtn; 
    } /** 
      *   转换double到String 
      *   @param double dMoney 
      *   @return String 
      */ 
    public   static   String   Double2String(   double   dMoney   )   { 
    String   sMoney   =   " "; DecimalFormat   df   =   new   DecimalFormat(   "############.### "   ); 
    try   { 
    sMoney   =   df.format(   dMoney   ); 
    }   catch   (   Exception   e   )   { 
    sMoney   =   " "; 
    } return   sMoney; 
    } public   static   void   main(   String   []   sArgv   ) 

    ChnAmt   chnAMT   ; chnAMT   =   new   ChnAmt( "936.00 "); System.out.println(   "ChnAmt()   [936.00]   to   "   ); while(   chnAMT.next()   ) 

    System.out.println(   "Value[ "   +   chnAMT.getResult()   +   "] "   ); 



      

  2.   

    我没提到数据库啊,映射表是放在内存中的,hashmap是不错的选择
      

  3.   

    这是我写的一个小写转换成大写的程序,能实现亿以上位数的转换:两个java文件,Big.java和Io.java
    Big.java如下:
    import java.util.*;
    public class Big {

    public static void main(String[] args)
    { Scanner sc=new Scanner(System.in);

    String i=sc.nextLine();
    io io =new io();
    String t="";
    int m=0; //让其进行两次循环,先整数后小数
    int sr=0;
    StringTokenizer st=new StringTokenizer(i,".");//用点分割
    while(st.hasMoreTokens())
    {
    String nt=st.nextToken();
    int n=nt.length();
    sr=n-1;
    if(m==0) //对整数部分的执行

    { //m++;
    while(n>0)
    { n--; char c=nt.charAt(sr-n);
    if(n>=5&&n<8)
    {
    //m=0;
    t=io.bigWriter(c, t);
    t=io.smallWriter(n,t);
    continue;
    }else if(n>=8)
    {
    m=0;
    t=io.bigWriter(c, t);
    t=io.smallWriter(n,t);
    continue;
    }
    t=io.bigWriter(c,t);

    t=io.smallWriter(n,t);
    }
    }
    else //对小数部分的执行
    {

    while(n>0)
    {
    n--;
    char c=nt.charAt(1-n);
    if(c=='0'&&(nt.charAt(1)=='0'))
     {
     System.out.println(t+"整"); 
     return;
     }

    t=io.bigWriter(c,t);

     if(n==1)
     t=t+"角";
    else if(n==0)
    {
    t=t+"分";
    }else 
    {
    System.out.println("输入有误");
    return;
    }
    }
    }


    }
    System.out.print(t);
    }

    }
    Io.java 如下:public class Io {
           public String bigWriter(char c,String t)
           {
         switch (c)
    {
    case '0':
    t=t+"零";
    break;
    case '1':
    t=t+"壹";
    break;
    case '2':
    t=t+"贰";
    break;
    case '3':
    t=t+"叁";
    break;
    case '4':
    t=t+"肆";
    break;
    case '5':
    t=t+"伍";
    break;
    case '6':
    t=t+"陆";
    break;
    case '7':
    t=t+"柒";
    break;
    case '8':
    t=t+"捌";
    break;
    case '9':
    t=t+"氿";
    break;

    }
            return t;
            
           }
           public String smallWriter(int n ,String t)
           {
         if(n>=5&&n<8)
    {
    if(n==5)
    t=t+"拾";
    else if(n==6)
    t=t+"佰";
    else if (n==7)
    t=t+"仟";
    //System.out.print("qqqqqqqqqq");
    }
         else if(n>=8)
         {
         if(n==8)
    t=t+"亿";
    else if(n==9)
    t=t+"拾";
    else if (n==10)
    t=t+"佰";
    else if(n==11)
    t=t+"仟";
    else if(n==12)
    t=t+"万";
         }
         else if(n==4)
         t=t+"万";
    else if(n==3)
    t=t+"仟";
    else if(n==2)
    t=t+"佰";
    else if(n==1)
    t=t+"拾";
    else if(n==0)
    {
    t=t+"元";
    }else 
    {
    System.out.println("输入有误1");
    }
            return t;
            
           }
    }
    希望对你有帮助
      

  4.   

    支持一楼,Google查查,能找到的
      

  5.   

    package houlei.csdn.text;public class RMBReader { static char [] nums  = new char [] {'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'};
    static char [] units = new char [] {'\0','拾','佰','仟','万','拾','佰','仟','亿','拾','佰','仟','万','拾','佰','仟'};

    public static String convert(String number){
    String [] sub = number.split("\\.");
    if(sub.length<=0 || sub.length>2)throw new NumberFormatException("数字格式有误");
    StringBuilder buff = new StringBuilder();
    convertInteger(sub[0],buff);
    if(sub.length==2){
    buff.append("点");
    convertFloat(sub[1],buff);
    }
    return buff.toString();
    }

    private static void convertFloat(String floatString, StringBuilder buff) {
    char floatNums [] = floatString.toCharArray();
    for(char ch : floatNums){
    buff.append(nums[ch-'0']);
    }
    } private static void convertInteger(String intString, StringBuilder buff) {
    char intNumbs [] = intString.toCharArray();
    if(intNumbs.length<=0){
    buff.append(nums[0]);
    return;
    }
    for(int i=intNumbs.length-1;i>=0;i--){
    if(intNumbs[i]!='0'){
    buff.insert(0,nums[intNumbs[i]-'0']);
    }else{
    if(buff.length()>0 && buff.charAt(0)!=nums[0])buff.insert(0, nums[0]);
    }
    int unit = intNumbs.length-i-1;
    if(unit<=0 || intNumbs[i]=='0')continue;
    buff.insert(1,units[unit]);
    }
    } /**
     * @param args
     */
    public static void main(String[] args) {
    System.out.println(convert("1009.168"));
    }}