doymoneya

把金额数据从小写转换为大写

using System;

namespace HaiNuo
{
    /*****************************************************************************************   
      *   类名:DecimalToUpper                                                                                     *   
      *   功能:把金额数据从小写转换为大写                                                           *   
      *   限制条件:金额小于一万亿,且少于两位小数                                   *   
      *   作者:雷俊强   junqiang_china@163.com                                           *   
      *   日期:2003-5-6                                                           *   
      *   用法:DecimalToUpper   x   =   new   DecimalToUpper();                                   *   
      *               this.textBox2.Text   =   x.ToUpper(d);                                           *   
      *               欢迎下载、使用                                                                                                                                     *   
      *   FOR   my   wife   and   my   son                                                                                                                                 *   
      *****************************************************************************************/


    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;
        }
    }
}









调用方法例:
 protected void Page_Load(object sender, EventArgs e)
    {

        decimal aaa = 132345336782.2m;
        HaiNuo.DecimalToUpper aa = new HaiNuo.DecimalToUpper();
        
        Response.Write(aa.ToUpper(aaa));


    }

分类:

技术点:

相关文章:

  • 2022-03-01
  • 2021-09-10
  • 2022-12-23
  • 2021-10-22
  • 2022-02-14
  • 2021-12-28
  • 2022-12-23
  • 2021-04-29
猜你喜欢
  • 2022-12-23
  • 2021-06-24
  • 2022-12-23
  • 2022-01-08
  • 2021-10-05
  • 2021-11-28
  • 2022-03-08
相关资源
相似解决方案