c#金额转大写函数

        #region ChangeMoneyToChinese

        /// <summary>
        /// 把金额小写转换为中文大写
        /// </summary>
        /// <param name="Money"></param>
        /// <returns></returns>
        public static string ChangeMoneyToChinese(decimal MoneyValue)
        {
            string sCHNumber="", sCHMoneyUnit="", sMoney="", sResultName="";
            int iMoneyLength=0, iNumber=0, iUnit=0, iLengthTwo=0, iUnitTwo=0;
            bool bExecute;

            //
            //初始化值
            //
            sCHNumber = "壹贰叁肆伍陆柒捌玖";
            sCHMoneyUnit = "分角元拾佰仟万拾佰仟亿拾佰仟";
            sMoney = MoneyValue.ToString("###.00");
            iMoneyLength = sMoney.Length;
            if(iMoneyLength >=16 || MoneyValue < 0.01m)
            {
                return "";
            }

            //
            //取无小数的字符串
            //
            sMoney = sMoney.Replace(".","");
            iMoneyLength = iMoneyLength - 1;
            iNumber = iMoneyLength * 2 - 1;
            iUnit = int.Parse(sMoney.Substring(0,1)) * 2 - 1;
            
            //
            //如果金额<1 sResultName=''
            //
            if((iMoneyLength == 3) && (iUnit < 0))    sResultName = "";
            else
            {
                //
                //如果金额>=1,转换金额
                //
                if(iUnit > 0)    
                {
                    sResultName = SubStringByte(sCHNumber,iUnit-1,2) + SubStringByte(sCHMoneyUnit,iNumber-1,2);
                }
            }

            iLengthTwo = 2;
            iNumber = iNumber - 2;
            bExecute = true;

            while(iLengthTwo <= iMoneyLength && bExecute)
            {
                iUnitTwo = int.Parse(sMoney.Substring(iLengthTwo-1, 1)) * 2 - 1;
                if(iUnitTwo > 0)
                {
                    sResultName = sResultName + SubStringByte(sCHNumber,iUnitTwo-1, 2) + SubStringByte(sCHMoneyUnit,iNumber-1, 2);
                    iLengthTwo = iLengthTwo + 1;
                    iNumber = iNumber - 2;
                    continue;    
                }
                int iCount = 0;

                while (iUnitTwo < 0)
                {
                    if(iMoneyLength >= 11)
                    {
                        if(iNumber < 21) iCount = iCount + 1;
                    }

                    if(iNumber == 5 || (iNumber == 13 && iCount <= 3) || iNumber == 21) 
                    {
                        sResultName=sResultName+SubStringByte(sCHMoneyUnit,iNumber-1, 2);
                    }

                    if(iNumber == 1)
                    {
                        sResultName = sResultName + "整";
                        bExecute = false;
                        break;    
                    }
                    iLengthTwo = iLengthTwo + 1;
                    iNumber = iNumber - 2;
                    iUnitTwo = int.Parse(sMoney.Substring(iLengthTwo-1, 1)) * 2 - 1;
                    if(iUnitTwo < 0)
                    {
                        continue;
                    }
                    else
                    {
                        if(iMoneyLength == 3) sResultName = sResultName + "零";
                        else sResultName = sResultName + "零";
                    }
                }
            }
            
            //
            //去掉元和角之间零(1230.32)
            //
            int iYuanPos = sResultName.IndexOf("元",0)+1;
            int iJaoPos = sResultName.IndexOf("角",0)+1;
            if(iYuanPos != -1 && iJaoPos != -1)
            {
                int iZeroPos = sResultName.IndexOf("零",iYuanPos);
                if(iZeroPos != -1)
                {
                    sResultName=sResultName.Remove(iZeroPos,1);
                }
            }

            return sResultName;
        }

        /// <summary>
        /// 按字符串取值
        /// </summary>
        /// <param name="Source"></param>
        /// <param name="Start"></param>
        /// <param name="Length"></param>
        /// <returns></returns>
        private static string SubStringAll(string Source,int Start,int Length)
        {
            string sResult="";
            if(Start>=Source.Length)
            {
                sResult="";
            }
            else
            {
                if(Start+Length>Source.Length)
                {
                    Length=Source.Length-Start;
                }
                sResult=Source.Substring(Start,Length);
            }
            return sResult;
        }

        /// <summary>
        /// 按字节取值
        /// </summary>
        /// <param name="Source"></param>
        /// <param name="Start"></param>
        /// <param name="Length"></param>
        /// <returns></returns>
        private static string SubStringByte(string Source,int Start,int Length)
        {
            System.Text.UnicodeEncoding UnicodeArray =new System.Text.UnicodeEncoding();
            byte[] bArray =UnicodeArray.GetBytes(Source);
            string sResult="";
            if(Start>=bArray.Length)
            {
                sResult="";
            }
            else
            {
                if(Start+Length>bArray.Length)
                {
                    Length=Source.Length-Start;
                }
                sResult=UnicodeArray.GetString(bArray,Start,Length);
            }
            return sResult;
        }

        #endregion 

 

转载于:https://my.oschina.net/u/698683/blog/1479606

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值