求助:怎样让数字从数据库取出来后转化大写成这种格式:X万X千X百X拾X元X角x分?

解决方案 »

  1.   

    将人民币的数字表示转化成大写表示(C#版)    
      实在没有什么好讲的,就是一个方法,大家拿去用吧using System;namespace Test.Com
    {
     /// <summary>
     /// 功能:字符串处理函数集
     /// </summary>
     public class DealString
     {
      #region 私有成员
      /// <summary>
      /// 输入字符串
      /// </summary>
      private string inputString=null;
      /// <summary>
      /// 输出字符串
      /// </summary>
      private string outString=null;
      /// <summary>
      /// 提示信息
      /// </summary>
      private string noteMessage=null;
      #endregion  #region 公共属性
      /// <summary>
      /// 输入字符串
      /// </summary>
      public string InputString
      {
       get{return inputString;}
       set{inputString=value;}
      }
      /// <summary>
      /// 输出字符串
      /// </summary>
      public string OutString
      {
       get{return outString;}
       set{outString=value;}
      }
      /// <summary>
      /// 提示信息
      /// </summary>
      public string NoteMessage
      {
       get{return noteMessage;}
       set{noteMessage=value;}
      }
      #endregion
      
      #region 构造函数
      public DealString()
      {
       //
       // TODO: 在此处添加构造函数逻辑
       //
      }
      #endregion  #region 公共方法
      public void ConvertToChineseNum()
      {
       string numList="零壹贰叁肆伍陆柒捌玖";
       string rmbList = "分角元拾佰仟万拾佰仟亿拾佰仟万";
       double number=0;
       string tempOutString=null;   try
       {
        number=double.Parse(this.inputString);
       }
       catch
       {
        this.noteMessage="传入参数非数字!";
        return;
       }
       
       if(number>9999999999999.99)
        this.noteMessage="超出范围的人民币值";   //将小数转化为整数字符串
       string tempNumberString=Convert.ToInt64(number*100).ToString();
       int tempNmberLength=tempNumberString.Length;
       int i=0;
       while(i<tempNmberLength)
       {
        int oneNumber=Int32.Parse(tempNumberString.Substring(i,1));
        string oneNumberChar=numList.Substring(oneNumber,1);
        string oneNumberUnit=rmbList.Substring(tempNmberLength-i-1,1);
        if(oneNumberChar!="零")
         tempOutString+=oneNumberChar+oneNumberUnit;
        else
        {
         if(oneNumberUnit=="亿"||oneNumberUnit=="万"||oneNumberUnit=="元"||oneNumberUnit=="零")
         {
          while (tempOutString.EndsWith("零"))
          {
           tempOutString=tempOutString.Substring(0,tempOutString.Length-1);
          }     }
         if(oneNumberUnit=="亿"||(oneNumberUnit=="万"&&!tempOutString.EndsWith("亿"))||oneNumberUnit=="元")
         {
          tempOutString+=oneNumberUnit;
         }
         else
         {
          bool tempEnd=tempOutString.EndsWith("亿");
          bool zeroEnd=tempOutString.EndsWith("零");
          if(tempOutString.Length>1)
          {
           bool zeroStart=tempOutString.Substring(tempOutString.Length-2,2).StartsWith("零");
           if(!zeroEnd&&(zeroStart||!tempEnd))
            tempOutString+=oneNumberChar;
          }
          else
          {
           if(!zeroEnd&&!tempEnd)
            tempOutString+=oneNumberChar;
          }
         }
        }
        i+=1;
       }   while (tempOutString.EndsWith("零"))
       {
        tempOutString=tempOutString.Substring(0,tempOutString.Length-1);
       }   while(tempOutString.EndsWith("元"))
       {
        tempOutString=tempOutString+"整";
       }   this.outString=tempOutString;   
      }
      #endregion
     }
    }
      

  2.   

    把金额类型转换成大写和英文     xiaxilin [原作]  
    关键字   金额转换 
    出处    
     
     using System;namespace ChangeMoney
    {
     /// <summary>
     /// ChangeManage 的摘要说明。
     /// </summary>
     public class ChangeMoneyClass
     {
      public static string MoneytoEng(string n)
      {
       //   string result="";
       string m=getFloat(n);
       string strfloat=" point"+m.Replace("0"," zero").Replace("1"," one").Replace("2"," two").Replace("3"," three").Replace("4"," four").Replace("5"," five").Replace("6"," six").Replace("7"," seven").Replace("8"," eight").Replace("9"," nine");
       string []b=new string[6];
       int i=0;
       double t=double.Parse(n);
       if (getInteger(n)=="0")
       {
        b[0]="zero";
       }
       
       
        //   for (i=0;t>=1000.0;i++)
       else
       {
        do
        {
        
         int k=int.Parse(getInteger(t.ToString()))%1000;
         b[i]=getNum3(k);
         t=t/1000.0;
         if (int.Parse(getInteger(t.ToString()))<1000 & int.Parse(getInteger(t.ToString()))>0)
         {
          switch(i)
          {
           case 0:
            if(k!=0)
            {
             b[i]=getNum3(int.Parse(getInteger(t.ToString())))+" thousand and "+b[i];
            }
            else
            {
             b[i]=getNum3(int.Parse(getInteger(t.ToString())))+" thousand "+b[i];
            }
            break;
           case 1:
            if(k!=0)
            {
             b[i]=getNum3(int.Parse(getInteger(t.ToString())))+" million and "+b[i];
            }
            else
            {
             b[i]=getNum3(int.Parse(getInteger(t.ToString())))+" million "+b[i];
            }
            break;
           case 2:
            if(k!=0)
            {
             b[i]=getNum3(int.Parse(getInteger(t.ToString())))+" billion and "+b[i];
            }
            else
            {
             b[i]=getNum3(int.Parse(getInteger(t.ToString())))+" billion "+b[i];
            }
            break;
           case 3:
            if(k!=0)
            {
             b[i]=getNum3(int.Parse(getInteger(t.ToString())))+" trillion and "+b[i];
            }
            else
            {
             b[i]=getNum3(int.Parse(getInteger(t.ToString())))+" trillion "+b[i];
            }
            break;
           default:
            b[i]=" the number is too large!!!";
            break;
          }
         }
         else if(int.Parse(getInteger(t.ToString()))>=1000)
         {
          switch(i)
          {
           case 0:
            b[i]=" thousand  "+b[i];
            break;
           case 1:
            b[i]=" million  "+b[i];
            break;
           case 2:
            b[i]=" billion  "+b[i];
            break;
           case 3:
            b[i]=" trillion  "+b[i];
            break;
           default:
            b[i]=" the number is too large!!!";
            break;
          }
         }
         //    while(i>=0)
         //    {
         //     result=result+b[i];
         //     i--;
         //    }
         i++;
        }while(t>=1000.0);
       }
       //   return result;
       return b[5]+b[4]+b[3]+b[2]+b[1]+b[0]+strfloat;   //0-999
       
      }
      private static string getNum3(int n)
      {
       string m=n.ToString();
       string []b=new string[3];
       string str="";
       if(n>=100 & n<1000)
       {
        b[0]=m.Substring(0,1).Replace("0","").Replace("1","one hundred ").Replace("2","two hundred ").Replace("3","three hundred ").Replace("4","four hundred ").Replace("5","five hundred ").Replace("6","six hundred ").Replace("7","seven hundred ").Replace("8","eight hundred ").Replace("9","nine hundred ");
        if(m.Substring(1,1)=="1")
        {     str=m.Substring(1,2).Replace("10","and ten ").Replace("11","and eleven ").Replace("12","and twelve ").Replace("13","and thirteen ").Replace("14","and fourteen ").Replace("15","and fifteen ").Replace("16","and sixteen ").Replace("17","and seventeen ").Replace("18","and eighteen ").Replace("19","and nineteen ");
        }
        else if(m.Substring(1,1)=="0")
        {
         str=m.Substring(1,2).Replace("00","").Replace("01","and one ").Replace("02","and two ").Replace("03","and three ").Replace("04","and four ").Replace("05","and five ").Replace("06","and six ").Replace("07","and seven ").Replace("08","and eight ").Replace("09","and nine ");
        }
        else
        {
         b[1]=m.Substring(1,1).Replace("2","and twenty ").Replace("3","and thirty ").Replace("4","and forty ").Replace("5","and fifty ").Replace("6","and sixty ").Replace("7","and seventy ").Replace("8","and eighty ").Replace("9","and ninty ");
         b[2]=m.Substring(2,1).Replace("0","").Replace("1","-one ").Replace("2","-two ").Replace("3","-three ").Replace("4","-four ").Replace("5","-five ").Replace("6","-six ").Replace("7","-seven ").Replace("8","-eight ").Replace("9","-nine ");
         str=b[1]+b[2];
        }
       }
       else if(n<100 & n>=10)
       {
        b[0]="";
        if(m.Substring(0,1)=="1")
        {     str=m.Substring(0,2).Replace("10","ten ").Replace("11","eleven ").Replace("12","twelve ").Replace("13","thirteen ").Replace("14","fourteen ").Replace("15","fifteen ").Replace("16","sixteen ").Replace("17","seventeen ").Replace("18","eighteen ").Replace("19","nineteen ");
        }
        else
        {
         b[1]=m.Substring(0,1).Replace("2","twenty ").Replace("3","thirty ").Replace("4","forty ").Replace("5","fifty ").Replace("6","sixty ").Replace("7","seventy ").Replace("8","eighty ").Replace("9","ninty ");
         b[2]=m.Substring(1,1).Replace("0","").Replace("1","-one ").Replace("2","-two ").Replace("3","-three ").Replace("4","-four ").Replace("5","-five ").Replace("6","-six ").Replace("7","-seven ").Replace("8","-eight ").Replace("9","-nine ");
         str=b[1]+b[2];
        }
       }
       else if(n>=0 & n<10)
       {
        b[0]="";
        b[1]="";
        b[2]=m.Substring(0,1).Replace("0","").Replace("1"," one ").Replace("2"," two ").Replace("3"," three ").Replace("4"," four ").Replace("5"," five ").Replace("6"," six ").Replace("7"," seven ").Replace("8"," eight ").Replace("9"," nine ");
        str=b[1]+b[2];
       }
       return b[0]+str;
      }
      private static string getInteger(string n)
      {
       string []a;
       a=n.Split('.');
       string s=a[0];
       return s;
      }
      private static string getFloat(string n)
      {
       if(n.Replace("0","").Replace("1","").Replace("2","").Replace("3","").Replace("4","").Replace("5","").Replace("6","").Replace("7","").Replace("8","").Replace("9","")=="")
       {
        n=n+".0";
       }
       string []a;
       a=n.Split('.');
       string s=a[1];
       return s;
      }
      

  3.   

    public static string GetMoneyStr(double num)//总
      {
       try
       {
        string m_point="圆";
        string m_sign;
        int m_len;
        //int g_max=20;
        int g_dec=4;
        string m_srcint;
        string m_srcdec;
        string m_retv="";
        int m_cntr=0;
        string m_decstr;    if(num>=0.00)
        {
         m_sign="";
        }
        else
        {
         m_sign="负";
         num=num*(-1);
        }
        m_srcint=num.ToString().Trim();//m_srcint--"5658626456.235"
        string[] s_cut=m_srcint.Split(new char[] {'.'});
        if(s_cut.Length==2)
        {
         if(s_cut[0].ToString().Trim().Length>15)
         {
          m_retv=m_sign+m_retv+m_srcint+"转换失败!";
          return m_retv;
        
         }
         if(s_cut[1].ToString().Trim().Length>4)
         {
          m_srcint=m_srcint.Substring(0,m_srcint.Length-(s_cut[1].ToString().Trim().Length-4));
         }
        }
        else if(s_cut.Length==1)
        {
         m_srcint=m_srcint+".0000";
        }
        else
        {
         return num.ToString()+"转换失败!";
        }
        s_cut=m_srcint.Split(new char[] {'.'},2);
        
        m_srcdec=s_cut[1].ToString().Trim();
        m_srcdec=m_srcdec+"0000";
        m_srcdec=m_srcdec.Substring(0,4);
        
        m_srcint=s_cut[0].ToString().Trim();
        m_len=m_srcint.Length;
       
        string m_chr,m_last="",m_this="",m_cnzero=Num2cn("0"),m_cnname,m_lbase,m_tbase=Len2cnbase(m_len);
        m_lbase=m_tbase;
        for(m_cntr=1;m_cntr<=m_len;m_cntr++)
        {
         m_chr=m_srcint.Substring(m_cntr-1,1);
         m_this=Num2cn(m_chr);
         m_cnname=Len2cnname(m_len-m_cntr+1);
         m_tbase=Len2cnbase(m_len-m_cntr+1);
         if(m_lbase==m_tbase)
         {
          if(m_last==m_cnzero && m_this==m_cnzero)
          {}
          else
          {
           if((m_this==m_cnzero))
            m_retv=m_retv+m_this+"";
           else
            m_retv=m_retv+m_this+m_cnname;
          }
         }
         else
         {
          if(m_retv.Length>=2)
          {
           if(m_retv.Substring(m_retv.Length-2,2)==m_cnzero)
           {
            m_retv=m_retv.Substring(0,m_retv.Length-2);
            m_last="";
           }
          }
          m_retv=m_retv+m_lbase;
          if(m_last==m_cnzero && m_this==m_cnzero)
          {}
          else
          {
           if((m_this==m_cnzero))
            m_retv=m_retv+m_this+"";
           else
            m_retv=m_retv+m_this+m_cnname;
          }
         }
         m_lbase=m_tbase;
         m_last=m_this;
        }
        if(m_retv.Length-2>=0)
        {
         if(m_retv.Substring(m_retv.Length-2,2)==m_cnzero)
         {
          m_retv=m_retv.Substring(0,m_retv.Length-2);
         }
        }
        m_retv=m_retv+m_point;
        m_decstr="";    if(double.Parse(m_srcdec)==0)
        {
         if(m_point=="圆")
          m_retv=m_retv+"整";
         else
          m_retv=m_retv+"";
        }
        else
        {
         m_len=g_dec;
         m_this="";
         m_last="";
         for(m_cntr=m_len;m_cntr>0;m_cntr--)
         {
          m_chr=m_srcdec.Substring(m_cntr-1,1);
          m_this=Num2cn(m_chr);
          if(m_point=="圆")
          {
          
           m_cnname=Jedec(m_cntr);
           if(m_this==m_cnzero && null==m_decstr)
           {}
           else
           {
            if(m_last==m_cnzero && m_this==m_cnzero)
            {}
            else
            {
             if(m_this==m_cnzero)
              m_decstr=m_this+""+m_decstr;
             else
              m_decstr=m_this+m_cnname+m_decstr;
            }
           }
          }
          else
          {
           m_cnname="";
           if(m_this==m_cnzero && null==m_decstr)
           {}
           else
            m_decstr=m_this+m_decstr;
         
          }
          m_last=m_this;
         }
        }
        string myretu=m_sign+m_retv+m_decstr;
        if(myretu.Substring(myretu.Length-1,1)=="零")
         return myretu.Substring(0,myretu.Length-1);
        else
         return myretu;
       }
       catch
       {
        return num.ToString()+"转换失败!";
       }
       
      }
      #region 1--"角" 2--"分"
      private static string Jedec(int num)
      {
       string retu="";
       switch(num)
       {
        case 1:
         retu="角";
         break;
        case 2:
         retu="分";
         break;
        case 3:
         retu="厘";
         break;
        case 4:
         retu="毫";
         break;
        default:
         retu="";
         break;
       }
       return retu;
      }  #endregion
      #region cn >=14 && cn<=19--"兆"
      private static string Len2cnbase(int cn)
      {
       string retu="";
       if(cn>=14 && cn<=19)
       {
        retu="兆";
       }
       else if(cn>=9 && cn<=13)
       {
        retu="亿";
       }
       else if(cn>=5 && cn<=8)
       {
        retu="万";
       }
       else if(cn<5)
       {
        retu="";
       }
       else
       {
        retu="N/A";
       }
       return retu;
      }
      #endregion
      #region 1--"",2--"拾"
      private static string Len2cnname(int len)
      {
       string retu="";
       switch(len)
       {
        case 1:
         retu="";
         break;
        case 2:
         retu="拾";
         break;
        case 3:
         retu="佰";
         break;
        case 4:
         retu="仟";
         break;
        case 5:
         retu="";
         break;
        case 6:
         retu="拾";
         break;
        case 7:
         retu="佰";
         break;
        case 8:
         retu="仟";
         break;
        case 9:
         retu="";
         break;
        case 10:
         retu="拾";
         break;
        case 11:
         retu="佰";
         break;
        case 12:
         retu="仟";
         break;
        case 13:
         retu="万";
         break;
        case 14:
         retu="";
         break;
        case 15:
         retu="拾";
         break;
        case 16:
         retu="佰";
         break;
        default:
         retu="N/A";
         break;
       }
       return retu;
      }
      #endregion
      #region "0"--"零" 1--"壹"
      private static string Num2cn(string numchr)
      {
       string retu="";
       switch(numchr)
       {
        case "0":
         retu="零";
         break;
        case "1":
         retu="壹";
         break;
        case "2":
         retu="贰";
         break;
        case "3":
         retu="叁";
         break;
        case "4":
         retu="肆";
         break;
        case "5":
         retu="伍";
         break;
        case "6":
         retu="陆";
         break;
        case "7":
         retu="柒";
         break;
        case "8":
         retu="捌";
         break;
        case "9":
         retu="玖";
         break;
        default :
         retu=numchr;
         break;
       }
       return retu;
      }
      #endregion
     }

      

  4.   

    http://www.5ivb.net/info/28/5ivb_2870.asp
      

  5.   

    实现这个功能,个人感觉可以使用很多不同的算法思维的,比如说可以把数字作为字符串处理或者通过数学运算来判断;多看看别人的思路可以拓展自己的思维方式。
    我的一个思路是:从“元拾佰仟、万拾佰仟、亿拾佰仟、万拾佰仟”上可以看出,整数部分其实可以按照“拾佰仟”(4位数字)来划分的,后面跟“元、万、亿”;也就是说把数字从个位起按4位分割(对10000求模运算),再写一个方法对分出来的4位数字进行处理就可以了;例:12,3456,7890  分出来的12就是壹拾贰亿
    下面是我的代码,写得很烂,只是想分享一下自己的思路和算法
    enum number:int
    {
    壹 = 1,
    贰,
    叁,
    肆,
    伍,
    陆,
    柒,
    捌,

    } enum numberUnit:int
    {
    元 = 0,
    万,
    亿,
    拾 = 11,
    佰,
    仟,
    分 = 21,

    } /// <summary>
    /// 把合计金额转换成中文
    /// </summary>
    public static string ToSumCN(float sum)
    {
    string sumCN = "";

    //取整数部分
    int integer = (int)Math.Floor(sum);
    //取小数部分
    int dec = (int)((sum -integer)*100);
    //因为调用intToCN()会略掉最有一位的单位,为了能显示多少角多少分,将小数部分乘10
    dec = dec*10;
    if(dec >=1)
    {
    sumCN = intToCN(dec,20) + sumCN;
    sumCN = "零" + sumCN;
    }
    else
    {
    sumCN = sumCN + "整";
    }
    //(int)Math.Ceiling((int)Math.Log10(sum)/4)  将数字按4位截取时可以截出的段数;先通过取对数求数字位数
    for(int i=0;i<=(int)Math.Ceiling((int)Math.Log10(sum)/4);i++)
    {
    //通过取模的方法取整数部分的后4位
    int intTemp = integer%10000;
    //通过emun来取此4位的单位 元 、万 、 亿
    sumCN = (numberUnit)i + sumCN;
    //将4位或以下数字转化为中文
    sumCN = intToCN(intTemp,10) + sumCN;
    //为了取下4位数字
    integer = integer/10000;
    } return sumCN;
    } /// <summary>
    /// 将4位或以下数字转化为中文
    /// </summary>
    private static string intToCN(int integer,int enumIndex)
    {
    string CN = "";
    //因为integer = integer/10;,integer.ToString().Length的数值会改变,在此记录初始值
    int count = integer.ToString().Length;
    for(int i=0;i<count;i++)
    {
    //求模取最后一位
    int intTemp = integer%10;
    if(intTemp != 0)
    {
    //略掉最后一位的单位
    if(i != 0)
    {
    CN = (numberUnit)(i+enumIndex) + CN;
    }

    CN =  ((number)intTemp).ToString() + CN;
    } integer = integer/10;
    } return CN;
    }