1.把金额数据从小写转换为大写
       namespace   HaiNuo  
      {  
          /*****************************************************************************************  
            *   类名:DecimalToUpper                                                                         *  
            *   功能:把金额数据从小写转换为大写                                                           *  
            *   限制条件:金额小于一万亿,且少于两位小数                                                *   
            *   用法:DecimalToUpper   x   =   new   DecimalToUpper();                          *  
            *               this.textBox2.Text   =   x.ToUpper(d);                                     *   
            *****************************************************************************************/   
          public   class   DecimalToUpper  
          {  
                  public   DecimalToUpper()  
                  {  
                          //  
                          //   TODO:   在此处添加构造函数逻辑  
                          //  
                  }  
   
                  ///   <summary>  
                  ///   小写金额转换为大写金额,其他条件:金额小于一万亿,最多两位小数  
                  ///   </summary>  
                  ///   <param   name="d">源金额,d   《   1000000000000.00(一万亿),且最多两位小数   </param>  
                  ///   <returns>结果,大写金额</returns>  
                  public   string   ToUpper(decimal   d)  
                  {  
                          if   (d   ==   0)  
                                  return   "零元整";  
   
                          string   je   =   d.ToString("####.00");  
                          if   (je.Length   >   15)  
                                  return   "";  
                          je   =   new   String('0',15   -   je.Length)   +   je; //若小于15位长,前面补0  
   
                          string   stry   =   je.Substring(0,4); //取得'亿'单元  
                          string   strw   =   je.Substring(4,4); //取得'万'单元  
                          string   strg   =   je.Substring(8,4); //取得'元'单元  
                          string   strf   =   je.Substring(13,2); //取得小数部分  
   
                          string   str1   =   "",str2   =   "",str3   =   "";  
   
                          str1   =   this.getupper(stry,"亿"); //亿单元的大写  
                          str2   =   this.getupper(strw,"万"); //万单元的大写  
                          str3   =   this.getupper(strg,"元"); //元单元的大写  
   
   
                          string   str_y   =   "",   str_w   =   "";  
                          if   (je[3]   ==   '0'   ||   je[4]   ==   '0') //亿和万之间是否有0  
                                  str_y   =   "零";  
                          if   (je[7]   ==   '0'   ||   je[8]   ==   '0') //万和元之间是否有0  
                                  str_w   =   "零";  
   
   
   
                          string   ret   =   str1   +   str_y   +   str2   +   str_w   +   str3; //亿,万,元的三个大写合并  
   
                          for   (int   i   =   0   ;i   <   ret.Length;i++) //去掉前面的"零"  
                          {  
                                  if   (ret[i]   !=   '零')  
                                  {  
                                          ret   =   ret.Substring(i);  
                                          break;  
                                  }  
   
                          }  
                          for   (int   i   =   ret.Length   -   1;i   >   -1   ;i--) //去掉最后的"零"  
                          {  
                                  if   (ret[i]   !=   '零')  
                                  {  
                                          ret   =   ret.Substring(0,i+1);  
                                          break;  
                                  }  
                          }  
   
                          if   (ret[ret.Length     -   1]   !=   '元') //若最后不位不是'元',则加一个'元'字  
                                  ret   =   ret   +   "元";  
   
                          if   (ret   ==   "零零元") //若为零元,则去掉"元数",结果只要小数部分  
                                  ret   =   "";  
   
                          if   (strf   ==   "00") //下面是小数部分的转换  
                          {  
                                  ret   =   ret   +   "整";  
                          }  
                          else  
                          {  
                                  string   tmp   =   "";  
                                  tmp   =   this.getint(strf[0]);  
                                  if   (tmp   ==   "零")  
                                          ret   =   ret   +   tmp;  
                                  else  
                                          ret   =   ret   +   tmp   +   "角";  
   
                                  tmp   =   this.getint(strf[1]);  
                                  if   (tmp   ==   "零")  
                                          ret   =   ret   +   "整";  
                                  else  
                                          ret   =   ret   +   tmp   +   "分";  
                          }  
   
                          if   (ret[0]   ==   '零')  
                          {  
                                  ret   =   ret.Substring(1); //防止0.03转为"零叁分",而直接转为"叁分"  
                          }  
   
                          return     ret; //完成,返回  
   
   
                  }  
                  ///   <summary>  
                  ///   把一个单元转为大写,如亿单元,万单元,个单元  
                  ///   </summary>  
                  ///   <param   name="str">这个单元的小写数字(4位长,若不足,则前面补零)</param>  
                  ///   <param   name="strDW">亿,万,元</param>  
                  ///   <returns>转换结果</returns>  
                  private   string   getupper(string   str,string   strDW)  
                  {  
                          if   (str   ==   "0000")  
                                  return   "";  
   
                          string   ret   =   "";  
                          string   tmp1   =   this.getint(str[0])   ;  
                          string   tmp2   =   this.getint(str[1])   ;  
                          string   tmp3   =   this.getint(str[2])   ;  
                          string   tmp4   =   this.getint(str[3])   ;  
                          if   (tmp1   !=   "零")  
                          {  
                                  ret   =   ret   +   tmp1   +   "仟";  
                          }  
                          else  
                          {  
                                  ret   =   ret   +   tmp1;  
                          }  
   
                          if   (tmp2   !=   "零")  
                          {  
                                  ret   =   ret   +   tmp2   +   "佰";  
                          }  
                          else  
                          {  
                                  if   (tmp1   !=   "零") //保证若有两个零'00',结果只有一个零,下同  
                                          ret   =   ret   +   tmp2;  
                          }  
   
                          if   (tmp3   !=   "零")  
                          {  
                                  ret   =   ret   +   tmp3   +   "拾";  
                          }  
                          else  
                          {  
                                  if   (tmp2   !=   "零")  
                                          ret   =   ret   +   tmp3;  
                          }  
   
                          if   (tmp4   !=   "零")  
                          {  
                                  ret   =   ret   +   tmp4   ;  
                          }  
   
                          if   (ret[0]   ==   '零') //若第一个字符是'零',则去掉  
                                  ret   =   ret.Substring(1);  
                          if   (ret[ret.Length   -   1]   ==   '零') //若最后一个字符是'零',则去掉  
                                  ret   =   ret.Substring(0,ret.Length   -   1);  
   
                          return   ret   +   strDW; //加上本单元的单位  
   
                  }  
                  ///   <summary>  
                  ///   单个数字转为大写  
                  ///   </summary>  
                  ///   <param   name="c">小写阿拉伯数字   0---9</param>  
                  ///   <returns>大写数字</returns>  
                  private   string   getint(char   c)  
                  {  
                          string   str   =   "";  
                          switch   (   c   )  
                          {  
                                  case   '0':  
                                          str   =   "零";  
                                          break;  
                                  case   '1':  
                                          str   =   "壹";  
                                          break;  
                                  case   '2':  
                                          str   =   "贰";  
                                          break;  
                                  case   '3':  
                                          str   =   "叁";  
                                          break;  
                                  case   '4':  
                                          str   =   "肆";  
                                          break;  
                                  case   '5':  
                                          str   =   "伍";  
                                          break;  
                                  case   '6':  
                                          str   =   "陆";  
                                          break;  
                                  case   '7':  
                                          str   =   "柒";  
                                          break;  
                                  case   '8':  
                                          str   =   "拐";  
                                          break;  
                                  case   '9':  
                                          str   =   "玖";  
                                          break;  
                          }  
                          return   str;  
                  }  
          }  
  }   
    

 

2.如何將數字前面補0,補足設定的長度

    例如 將 123 前面補0,補到長度為6,可以透過 String.PadLeft 與 String.Format 的方式 

    //將數字前面補0,補足長度為6
    String snum = "123";
    String pnum = snum.PadLeft(6, '0');
    String fnum = String.Format("...{0:000000}",Convert.ToInt16(snum));
    MessageBox.Show( "原始字串 : " + snum + "\n 透過 PadLeft : " + pnum + "\n 透過 String.Format : " + fnum);

 

3.生成编号

              /// <summary>
              /// 取得编号
              /// 如GetNo("LZD25"),返回"LZD26"
              /// </summary>
              /// <param name="strIn">基础编号</param>
              /// <returns></returns>
              public static string GetNo(string strIn)
              {
                    if (strIn == "" || strIn == null)
                    {
                          return "0001";
                    }

                    string chars = "";
                    string digites = "";

                    //字符串中末尾的数字序列起始位置,-1表示没有数字
                    int index=-1;

                    //获取字符串中末尾的数字序列起始位置
                    for (int i = 0; i < strIn.Length; i++)
                    {
                          if (Char.IsDigit(strIn[i]))
                          {
                                index = i;
                                digites += strIn[i].ToString();
                          }
                          else //非数字
                          {
                                chars = strIn.Substring(0, i);
                                index = -1;
                                digites = "";
                          }
                    }

                    if (index == -1)
                    {
                          return strIn + "1";
                    }
                    else
                    {
                          return ""+chars + (Convert.ToInt32(digites) + 1);
                    }
              }

 

    

posted on 2009-07-01 10:29  Kein  阅读(297)  评论(0编辑  收藏  举报